如何使用Node C ++插件部署动态库?

时间:2017-06-28 02:31:44

标签: c++ node.js cmake node-gyp

我正在使用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吗?

1 个答案:

答案 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。