2017-07-27 5 views
1

Ich schrieb C++ - Addon für Node.js. Versuchte Sample-Bibliothek zu verwenden, genannt libSample.so die Deklaration der Funktion printHello hat.Fehler: Gemeinsame Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein Verzeichnis

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

Es funktionierte gut (Compiled node-gyp configure build mit und ausgeführt node ./)

Wenn ich eine andere komplexere Bibliothek zu benutzen versucht, genannt libcore .damit. Der folgende Fehler wurde ausgegeben, als er gestartet wurde. Kompilierung und configure übergeben finden:

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) 

einige Stück Verwendung 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); 
    } 

Die binding.gyp Datei: Der Weg ist richtig, weil es mit einer anderen Bibliothek gearbeitet wird :)

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

Ich werde für Antworten oder Vorschläge geschätzt werden!

+1

Fehler ist ziemlich klar, Knoten kann Ihre Addon-Bibliothek nicht finden. Sie finden relevante Informationen darüber, wie der Knoten die Suche nach Modulen durchführt [hier] (https://nodejs.org/api/modules.html). – VTT

+0

@ VTT Das Interessante ist, dass es eine andere Bibliothek in demselben Verzeichnis findet. Aber wenn ich versuche, libCore.so zu verwenden. Es zeigt einen solchen Fehler an. Danke für den Link! –

Antwort

1

Gefunden einfache Lösung, aber ich vielleicht nicht in Ordnung für die langfristige Entwicklung. Ich denke, das Problem lag in Abhängigkeitsbibliotheken, die für Ihre gemeinsame Bibliothek benötigt werden. Sie können mit dem Befehl auf Terminal 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) 

Oberhalb der Liste der abhängigen Bibliotheken für meine Shared Library benötigte Bibliotheken sehen.

LÖSUNG:

Sie sollten Ihre gemeinsam genutzte Bibliothek in/usr/lib Verzeichnis kopieren. Auf diese Weise löste ich mein Problem.

cp path/where/yourLocated/libCore.so /usr/lib 
Verwandte Themen