2017-06-28 12 views
0

我正在编译使用cmake-js的Node C++插件。我有我的C代码引用的动态库。 I .: .:如何使用Node C++插件部署动态库?

*src 
MyAddon.cpp 
*foo 
    *include 
    *lib 
    *linux64 
    libfoo.so 

编译得很好。但是当我运行时出现错误

如何确保libfoo.so以可在运行时链接的方式进行部署?

添加到package.json中的文件不起作用。我可以在package.json中设置LD_LIBRARY_PATH吗?

回答

1

所以工作了。诀窍是确保rpath设置正确(问题在于rpath默认设置为绝对路径,因此它可以在本地工作,但在部署时不会)。

你可以看到这个当您在.node文件readelf运行:

readelf -d build/Release/addon.node 

将返回这样的事情。注意绝对路径

Dynamic section at offset 0x2fd9d30 contains 31 entries: 
    . 
    . 
    0x000000000000000f (RPATH)    Library rpath: [/home/user/foobartest/foo/lib] 

解决这个问题,我能找到的唯一途径是做到这一点的CMake的文件:

set( CMAKE_SKIP_RPATH on) 
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-rpath,foo/lib") 

在运行时LD_LIBRARY_PATH然后确保通过设置env.process设定正确使用.LD_LIBRARY_PATH。