我正在为一个用C ++编写的更大程序编写一个插件模块。我之前从未写过SO库。我的模块正确编译和链接(我认为)然而加载SO的主程序崩溃时出现错误symbol lookup error
。
我写的模块运行正常,直到我开始尝试使用其中的其他库。 (特别是caffe)
/path-to-binary/binary-name: symbol lookup error: ./build/libTestModule.so: undefined symbol: _ZN5caffe2db5GetDBERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
我尝试将export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
添加到.bashrc
。
我这样做是因为(经过一些互联网搜索 - 我实际上并不明白我在这里做什么)我跑了
nm -g libcaffe.so | grep _ZN5caffe2db5GetDBERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
文件夹/usr/lib
中的,该符号位于libcaffe.so
。
00000000001cbb30 T _ZN5caffe2db5GetDBERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
libcaffe.so
位于/usr/lib
,其中包含我的程序无法找到的符号。LD_LIBRARY_PATH
设置为/usr/lib
,以便我的程序可以找到libcaffe.co
及其中包含的符号/usr/lib
包含大量“默认”.so
文件,所以无论是否设置了LD_LIBRARY_PATH
,都会搜索到这个,即不应该是这个目录默认搜索?libcaffe.so
找到上面的符号? cmake_minimum_required(VERSION 3.3)
project(TestModule)
find_package(Falaise REQUIRED)
add_library(TestModule SHARED TestModule.h TestModule.cpp)
set(Caffe_INCLUDE_DIRS "/usr/include/caffe")
set(Caffe_LIBRARIES "/usr/lib/libcaffe.so")
target_link_libraries(TestModule PUBLIC Falaise::FalaiseModule)
答案 0 :(得分:0)
您说libTestModule.so
取决于libcaffe.so
,但您确实如此
没有链接它。这样:
cmake_minimum_required(VERSION 3.3)
project(TestModule)
find_package(Falaise REQUIRED)
add_library(TestModule SHARED TestModule.h TestModule.cpp)
target_link_libraries(TestModule PUBLIC Falaise::FalaiseModule caffe)
是你怎么做的。