agn*_*nul 19 linux opencv cmake static-libraries static-linking
我正在尝试使用在Linux上运行的CMake构建一个基于OpenCV的项目.到目前为止,我的CMakeLists.txt文件看起来像
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS})
Run Code Online (Sandbox Code Playgroud)
但这导致动态链接库.如何链接静态库?
您只需BUILD_SHARED_LIBS在CMake 中将标志设置为false即可构建静态OpenCV库.然后,您需要做的就是使用这些静态库构建自己的应用程序,在以下内容中添加对OpenCV的依赖CMakeLists.txt:
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (your-application ${OpenCV_LIBS})
Run Code Online (Sandbox Code Playgroud)
和CMake将照顾一切.
要静态链接所有内容,我相信你正在寻找CMAKE_EXE_LINKER_FLAGS(添加-static).
您使用的是OpenCVConfig.cmake的"简单方法"吗?还是旧的FindOpenCV.cmake?
实际上这个问题似乎已经在OpenCVConfig.cmakeOpenCV附带的问题中修复了.你所要做的就是定义OpenCV_STATIC你的CMakeLists.txt.即
set(OpenCV_STATIC ON)
find_package(OpenCV REQUIRED)
Run Code Online (Sandbox Code Playgroud)
AFAIK 这有点棘手,因为 CMake,更准确地说是 find_library 命令,更喜欢共享库,并在共享和静态都可用的情况下找到那些库。
我自己仍在寻找一个好的解决方案,以便能够“尽可能静态地”编译二进制文件,但我还没有找到优雅的解决方案。它肯定会起作用的唯一方法是通过自定义 FindXXXX 模块实现所有内容。
| 归档时间: |
|
| 查看次数: |
33596 次 |
| 最近记录: |