2017-09-03 65 views
0

我想創建我的第一個npm插件,但我一直得到一個無法解析的外部符號。npm addon無法解析的外部符號

> node-gyp configure build 
> error LNK2001: unresolved external symbol DeliverMessage 

錯誤告訴我頭文件沒有鏈接到庫文件。我知道binding.gyp文件找到庫文件,因爲它沒有拋出「無法打開輸入文件」。一切似乎都是正確的,我不確定接下來要檢查什麼。

使用: 節點V8.0.0

節點-GYP v3.6.2


項目結構:

- 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

不要發送垃圾郵件標籤。這顯然不是C. – Olaf

回答

0

大量的故障排除時間和研究之後,我發現我有兩個問題:

(1) 的文件.LIB採用C語言編寫所以我需要概括了我的頭文件,如下所示:

// myLibrary.h 

#ifndef EXAMPLE_H 
#define EXAMPLE_H 

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

(2).lib是32位的,我的版本節點是64位。我不得不安裝32位節點。

當創建插件時,它創建了一個bindings.sln文件。該文件對解決問題非常有幫助。我在Visual Studio中打開它,它提供了一些警告和錯誤。

0

所以DeliverMessage是你的庫的一部分?正如你注意到它的一個鏈接器錯誤,如果相對路徑是正確的,你是否嘗試使用絕對路徑到你的.lib?爲什麼../myLibrary應該是./如果.lib文件與您的bindings.gyp位於相同的目錄中。