2017-06-28 40 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。