2017-09-03 9 views
0

J'essaie de créer mon premier addon npm, mais je continue d'obtenir un symbole externe non résolu. L'erreur me dit que le fichier d'en-tête n'est pas lié au fichier de bibliothèque. Je sais que le fichier binding.gyp trouve le fichier de bibliothèque car il ne lance pas un "fichier d'entrée impossible à ouvrir". Tout semble correct et je ne suis pas vraiment sûr de ce qu'il faut vérifier ensuite.npm addon symbole externe non résolu

utilisant: noeud v8.0.0

noeud-gyp v3.6.2


structure du projet:

- example 
    - myLibrary.h 
    - myLibrary.lib 
    - example.cc 
    - binding.gyp 

// myLibrary.h 

#ifndef EXAMPLE_H 
#define EXAMPLE_H 

int Send(char *Address1, unsigned short SaveLoad, char *Address2); 

// example.cc 

#include "myLibrary.h" 
#include <node.h> 


using v8::Exception; 
using v8::FunctionCallbackInfo; 
using v8::Isolate; 
using v8::Local; 
using v8::Number; 
using v8::Object; 
using v8::String; 
using v8::Value; 


void SendMessage (const FunctionCallbackInfo<Value>& args) { 

    char *a = "AAAAAA"; 
    char *c = "CCCCCC"; 

    int result = DeliverMessage(a, 0, c); 


    args.GetReturnValue().Set(result); 
} 

void Init(Local<Object> exports) { 
    NODE_SET_METHOD(exports, "sendMessage", SendMessage); 
} 

NODE_MODULE(addon, Init) 

// binding.gyp 

{ 
    "targets": [ 
    { 
     "target_name": "exampleBuild", 
     "link_settings": { 
     "libraries": [ 
      "../myLibrary.lib", 
     ] 
     }, 
     "sources": [ "example.cc" ], 
     "include_dirs": [ 
     "<!(node -e \"require('nan')\")", 
     ] 
    } 
    ] 
} 
+0

Ne pas spammer les tags. Ce n'est apparemment pas C. – Olaf

Répondre

0

Après beaucoup de temps de dépannage et de la recherche, je trouve que j'avais deux problèmes:

(1) Le fichier .lib est écrit en C. Donc, je devais résumer mon dossier d'en-tête comme ceci:

// myLibrary.h 

#ifndef EXAMPLE_H 
#define EXAMPLE_H 

extern "C" { 
    int Send(char *Address1, unsigned short SaveLoad, char *Address2); 
} 

(2) Le fichier .lib était en 32 bits et ma version de nœud était en 64 bits. J'ai dû installer le noeud 32 bits. Lorsque l'addon a été construit, il a créé un fichier bindings.sln.

Ce fichier a été extrêmement utile pour comprendre le problème. Je l'ai ouvert dans Visual Studio, qui offrait des avertissements et des erreurs.

0

Alors DeliverMessage fait partie de votre bibliothèque? Comme vous avez remarqué une erreur de lien, si le chemin relatif est correct, l'avez-vous essayé avec un chemin absolu vers votre fichier .lib? Et pourquoi ../myLibrary, devrait être ./ si le fichier .lib est dans le même répertoire que votre bindings.gyp.