我正在使用cmake-js编译Node C ++ Add-on。我有我在C代码中引用的动态库。即:
*src
MyAddon.cpp
*foo
*include
*lib
*linux64
libfoo.so
编译好。但是当我运行
时出现错误如何确保以运行时链接的方式部署libfoo.so?
添加到package.json中的文件,不起作用。我可以在package.json中设置LD_LIBRARY_PATH吗?
答案 0 :(得分: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")
然后在运行时确保通过设置env.process.LD_LIBRARY_PATH正确设置LD_LIBRARY_PATH。