2017-07-27 66 views
1

我正在爲Node.js編寫C++插件。試圖用所謂的libSample.so樣本庫,它具有功能printHello聲明:錯誤:無法打開共享目標文件:沒有這樣的文件或目錄

void printHello() { 
    std::cout << "Hello World\n"; 
} 

它能正常工作(使用node-gyp configure build編譯和執行node ./

當我試圖用另一種稱爲libCore更復雜的庫。所以。開始執行時產生以下錯誤。編譯和配置通過發現:

module.js:597 
    return process.dlopen(module, path._makeLong(filename)); 
       ^

Error: libPlayerCore.so: cannot open shared object file: No such file or directory 
    at Error (native) 
    at Object.Module._extensions..node (module.js:597:18) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 
    at Module.require (module.js:497:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/home/jasurn/CLionProjects/JsTest/hello.js:2:15) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 

一些片使用的libCore.so

//#include <core.h> definition of core library lies in this header 
    void CreateObject(const FunctionCallbackInfo<Value>& args) { 
     Isolate* isolate = args.GetIsolate(); 
     Local<Object> obj = Object::New(isolate); 
     obj->Set(String::NewFromUtf8(isolate, "msg"), args[0]->ToString()); 
     //usage of core library 
     Core core; 
     args.GetReturnValue().Set(obj); 
    } 

的binding.gyp文件:路徑是正確的,因爲它與其他庫:)

工作
{ 
    "targets": [ 
    { 
     "target_name": "addon", 
     "sources": [ "hello.cc" ], 
     "libraries": [ 
     "/home/jasurn/CLionProjects/JsTest/libPlayerCore/lib/libCore.so" 
       ] 
    } 
    ] 
} 

我將不勝感激的答案或建議!

+1

錯誤很明顯,節點找不到你的插件庫。您可以找到有關節點如何在模塊上執行搜索的相關信息[此處](https://nodejs.org/api/modules.html)。 – VTT

+0

@VTT有趣的是它在同一個目錄中找到另一個庫。但是當我嘗試使用libCore.so。它顯示這樣的錯誤。感謝您的鏈接! –

回答

1

找到簡單的解決方案,但我可能不適合長期發展。我認爲問題在於共享庫所需的依賴庫。你可以看到在終端lld libCore.so

linux-vdso.so.1 => (0x00007ffcae9d6000) 
    libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007fa19dc07000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa19d9e9000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa19d7e5000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa19d45c000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa19d153000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa19cf3a000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa19cb73000) 
    /lib64/ld-linux-x86-64.so.2 (0x00005637d3532000) 
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa19c96b000) 

以上依賴庫列表中通過命令所需的庫爲我的共享庫。

SOLUTION:

您應該將共享庫複製到/ usr/lib目錄位置。這樣解決了我的問題。

cp path/where/yourLocated/libCore.so /usr/lib 
相關問題