CMake如何在Linux上链接外部共享库?

huangapple go评论155阅读模式
英文:

CMake link external shared lib on linux?

问题

我尝试在Linux上使用CMake链接外部库。编译和构建都正常。但当我运行它时,它显示以下错误:

  1. ./test/calculator_test: error while loading shared libraries: ../../../third_party/add/lib/add.so: cannot open shared object file: No such file or directory

文件树(我删除了一些不必要的部分):

  1. ├── CMakeLists.txt
  2. ├── build
  3. ├── src
  4. ├── test
  5. ├── CMakeLists.txt
  6. └── calculator
  7. ├── CMakeLists.txt
  8. └── calculator_test.cpp
  9. └── third_party
  10. ├── add
  11. ├── include
  12. └── add.h
  13. └── lib
  14. └── add.so
  15. └── googletest
  16. ...

test/calculator/CMakeLists.txt:

  1. add_library(lib-add SHARED IMPORTED)
  2. set_target_properties(lib-add
  3. PROPERTIES
  4. IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/third_party/add/lib/add.so"
  5. INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/third_party/add/include"
  6. )
  7. add_executable(calculator_test calculator_test.cpp)
  8. target_link_libraries(calculator_test PRIVATE lib-add lib-sub)
  9. set_target_properties(calculator_test
  10. PROPERTIES
  11. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/test"
  12. COMMAND calculator_test
  13. )

那么为什么会出现这个错误,如何修复它呢?

英文:

I try to link an external libaray on Linux in CMake.
The compile and make are fine.
But when I run it, it says:

./test/calculator_test: error while loading shared libraries: ../../../third_party/add/lib/add.so: cannot open shared object file: No such file or directory

File tree (I remove some unnecessary part):

  1. ├── CMakeLists.txt
  2. ├── build
  3. ├── src
  4. ├── test
  5. ├── CMakeLists.txt
  6. └── calculator
  7. ├── CMakeLists.txt
  8. └── calculator_test.cpp
  9. └── third_party
  10. ├── add
  11. ├── include
  12. └── add.h
  13. └── lib
  14. └── add.so
  15. └── googletest
  16. ...

test/calculator/CMakeLists.txt:

  1. add_library(lib-add SHARED IMPORTED)
  2. set_target_properties(lib-add
  3. PROPERTIES
  4. IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/third_party/add/lib/add.so"
  5. INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/third_party/add/include"
  6. )
  7. add_executable(calculator_test calculator_test.cpp)
  8. target_link_libraries(calculator_test PRIVATE lib-add lib-sub)
  9. set_target_properties(calculator_test
  10. PROPERTIES
  11. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/test"
  12. COMMAND calculator_test
  13. )

So why and how to make it correct?

答案1

得分: 0

我认为这是CMake的一个错误。

我在使用3.22.1(Ubuntu 22.04)时遇到了这个问题。升级到CMake 3.27后问题解决了。看起来这个问题在CMake 3.24中已经修复了。

英文:

I think it is a bug of cmake.

I see the problem when using 3.22.1 (Ubuntu 22.04). After upgrading to cmake 3.27 it works. It seems it was fixed in cmake 3.24.

huangapple
  • 本文由 发表于 2023年8月10日 14:33:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/76873134.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定