2017-07-27 7 views
1

J'écrivais C++ Addon pour Node.js. Essayé d'utiliser la bibliothèque d'échantillons appelée libSample.so qui a la déclaration de la fonction PrintHello:.Erreur: Impossible d'ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type

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

Il a bien fonctionné (en utilisant node-gyp configure build et Compilé exécuté node ./)

Quand j'ai essayé d'utiliser une autre bibliothèque plus complexe appelé libcore .alors. L'erreur suivante s'est produite lors du démarrage de l'exécution. Compilation et configure trouver passé:

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) 

un morceau de l'utilisation 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); 
    } 

Le fichier binding.gyp: le chemin est correct, car il est travaillé avec une autre bibliothèque :)

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

Je serai apprécié pour des réponses ou des suggestions!

+1

L'erreur est assez claire, le noeud ne trouve pas votre bibliothèque d'addons. Vous pouvez trouver des informations pertinentes sur la façon dont le nœud effectue une recherche sur les modules [ici] (https://nodejs.org/api/modules.html). – VTT

+0

@VTT La chose intéressante est qu'il trouve une autre bibliothèque dans le même répertoire. Mais quand j'essaie d'utiliser libCore.so. Il affiche une telle erreur. Merci pour le lien! –

Répondre

1

Solution trouvée simple, mais peut-être que je ne vais pas bien pour le développement à long terme. Je pense que le problème était avec les bibliothèques de dépendances nécessaires pour votre bibliothèque partagée. Vous pouvez voir les bibliothèques nécessaires par commande sur la borne 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) 

Au-dessus de la liste des bibliothèques dépendantes de ma bibliothèque partagée.

SOLUTION:

Vous devez copier votre bibliothèque partagée à l'emplacement/usr/lib. De cette façon, j'ai résolu mon problème.

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