在CMake中链接共享库(它依赖于其他共享库)

时间:2016-02-24 08:04:46

标签: cmake caffe

我正在尝试构建一个链接到共享库(名为“caffe”)的可执行文件。共享库依赖于另一个共享库(名为“cblas”)。当我尝试链接到我的CMake文件中的caffe时,它显示以下错误:

  找不到libcaffe.so所需的libcblas.so.3(尝试使用-rpath或   -rpath链路)

我在CMakeLists.txt中使用以下语句:

link_directories(${BINARIES}/lib)
add_library(CAFFE_LIBRARY SHARED IMPORTED)
set_target_properties(CAFFE_LIBRARY PROPERTIES IMPORTED_LOCATION ${BINARIES}/lib/libcaffe.so)
target_link_libraries(${PROJECT_NAME} CAFFE_LIBRARY)

{cblas'和'caffe'库都存在于${BINARIES}/lib文件夹中。

我还需要将cblas.so添加到target_link_libraries吗?此外,我不是在构建caffe.so所以通过CMake构建它并将其保持为依赖不是一个选项

在链接时需要解析共享库的依赖关系树是否存在同样问题的其他可行解决方案?

1 个答案:

答案 0 :(得分:1)

浏览库的GitHub树,在我看来它提供了一个包配置文件。因此,如果您以正常方式安装它,您应该能够将其作为包找到,而不是自己定义导入的目标:

find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})
add_definitions(${Caffe_DEFINITIONS})    # ex. -DCPU_ONLY

add_executable(caffeinated_application main.cpp)
target_link_libraries(caffeinated_application ${Caffe_LIBRARIES})

上面的示例来自该主题的Caffe documentation