【问题标题】:CMake wrong path to *.so filesCMake错误的* .so文件路径
【发布时间】:2020-05-21 13:01:29
【问题描述】:

我的项目配置是这样的:

proj/main.c
proj/myinc.h

我的程序使用外部库,由我手动添加:

proj/include/inc1.in
proj/include/inc2.in

proj/lib/lib1.so
proj/lib/lib2.so.1

我将它们添加到我的 CMake 文件中:

add_library(lib1 SHARED IMPORTED)
add_library(lib2 SHARED IMPORTED)
set_property(TARGET lib1 PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/lib/lib1.so")
set_property(TARGET lib2 PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/lib/lib2.so.1")

并链接它:

target_link_libraries(${PROJECT_NAME} lib1 lib2)

另外,我必须将这两个库复制到/usr/bin 以便稍后运行我的可执行文件。

install(FILES ${PROJECT_SOURCE_DIR}/lib/lib1.so DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install(FILES ${PROJECT_SOURCE_DIR}/lib/lib2.so.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

然后我使用:cmake . && make && sudo make install 然后我删除 proj/lib 目录。

但是当我运行我构建的文件时,它会在 proj/lib/ 中请求库,但在 /usr/lib 中却没有:

$ /usr/bin/app
app: error while loading shared libraries: lib/lib1.so: cannot open shared object file: No such file or directory

问题:如何让我构建的应用使用来自 /usr/lib 的共享库? 谢谢

【问题讨论】:

  • 欢迎来到 Stack Overflow!也许,这是一个 RPATH 问题?考虑阅读this
  • 我不太清楚。我添加了 set(CMAKE_INSTALL_RPATH "/usr/lib") 和 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)。但仍然在 proj/lib 中搜索 *.so
  • 你怎么知道它在proj/lib中的样子?错误信息显示lib/lib1.so,这是一个相对路径,可以对应either路径。
  • 如果我删除 proj/lib 文件夹,程序会抛出该错误。那么我如何设置我构建的应用程序来搜索 /usr/lib 中的库(不在 proj/lib 中)
  • 另外,CMAKE_INSTALL_PREFIX 的值是多少?你改了吗?这默认为/usr/local,这表明您的库将安装到/usr/local/lib 目录...

标签: c build cmake


【解决方案1】:

直接添加libs到target_link_libraries解决:

target_link_libraries(
        ${PROJECT_NAME}
        ${PROJECT_SOURCE_DIR}/lib/lib1.so
        ${PROJECT_SOURCE_DIR}/lib/lib2.so.1
)

安装:

install(FILES ${PROJECT_SOURCE_DIR}/lib/lib2.so.1 DESTINATION /usr/lib)
install(FILES ${PROJECT_SOURCE_DIR}/lib/lib1.so DESTINATION /usr/lib)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2015-06-21
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多