我正在为一个更大的程序编写插件模块,用C++编写。我以前从来没有写过这样的图书馆。但是,我的模块正确地编译和链接(我认为),但是装载SO的主程序会出现错误symbol lookup error。
我正在编写的模块工作得很好,直到我开始尝试使用它中的其他库。(特别是首席执行官)
/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_traitsIcESaIcEEElibcaffe.so在/usr/lib中,包含我的程序找不到的符号。LD_LIBRARY_PATH设置为/usr/lib,以便我的程序能够找到libcaffe.co及其中包含的符号。/usr/lib包含大量“默认”.so文件,因此将不考虑是否设置了LD_LIBRARY_PATH (不应该默认搜索此目录)。libcaffe.so__中找到上面的符号?CMakeLists.txt
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)发布于 2018-02-02 15:47:59
您可以说,您的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)你会怎么做。
https://stackoverflow.com/questions/48581816
复制相似问题