我正在使用cmake-js编译一个Node附加组件。我在我的C代码中引用了动态库。即:
*src
MyAddon.cpp
*foo
*include
*lib
*linux64
libfoo.so这可以很好地编译。但是当我运行时,我得到一个错误
如何确保libfoo.so部署为可以在运行时链接的方式?
添加到package.json中的文件不起作用。我可以在package.json中设置LD_LIBRARY_PATH吗?
发布于 2017-06-29 07:33:45
所以解决了这个问题。诀窍是确保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。
https://stackoverflow.com/questions/44792721
复制相似问题