【问题标题】:Linking Shared library (which has dependency on other shared library) in CMake在 CMake 中链接共享库(依赖于其他共享库)
【发布时间】:2016-06-06 09:46:35
【问题描述】:

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

libcblas.so.3,libcaffe.so 需要,未找到(尝试使用 -rpath 或 -rpath-link)

我在我的 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 构建它并将其作为依赖项不是一种选择

对于链接时需要解析共享库的依赖树的相同问题,还有其他可行的解决方案吗?

【问题讨论】:

    标签: cmake caffe


    【解决方案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的话题。

    【讨论】:

    • 我有一个自定义版本的 caffe.so 。因此,在这里从源代码构建 Caffe 不是一种选择。
    • @iotaSingh 这应该是问题中非常相关的信息;请编辑它。未修改的 Caffe 是否也依赖于 cblas?如果是这样,它的包配置文件应该仍然可供您使用。如果不是,请在问题中澄清这一点,我将相应地扩展答案。
    猜你喜欢
    • 2012-06-19
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多