我如何告诉 cmake 我希望我的项目静态链接库?
- 2024-11-14 08:30:00
- admin 原创
- 20
问题描述:
我正在尝试使用 CMake 构建一个基于 OpenCV 的项目,在 Linux 上运行。到目前为止,我的CMakeLists.txt
文件看起来像
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS})
但这会产生动态链接库。如何链接静态库?
解决方案 1:
实际上,这个问题似乎已经在OpenCVConfig.cmake
OpenCV 附带的 中修复了。你所要做的就是OpenCV_STATIC
在你的 中定义CMakeLists.txt
。即
set(OpenCV_STATIC ON)
find_package(OpenCV REQUIRED)
解决方案 2:
只需BUILD_SHARED_LIBS
在 CMake 中将标志设置为 false,即可构建静态 OpenCV 库。然后,使用这些静态库构建自己的应用程序所需要做的就是在您的中添加对 OpenCV 的依赖CMakeLists.txt
:
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (your-application ${OpenCV_LIBS})
CMake 将会处理好一切。
解决方案 3:
为了静态链接所有内容,我相信您正在寻找CMAKE_EXE_LINKER_FLAGS
(添加-static
)。
您使用的是 OpenCVConfig.cmake 的“简单方法”吗?还是较旧的 FindOpenCV.cmake?
解决方案 4:
据我所知,这有点棘手,因为 CMake,更准确地说是 find_library 命令,更喜欢共享库并在共享和静态都可用时找到它们。
我自己仍在寻找一个好的解决方案,以便能够“尽可能静态”地编译二进制文件,但我还没有找到完美的解决方案。唯一肯定可行的方法是通过自定义 FindXXXX 模块实现一切。
解决方案 5:
在 add_library 行上指定 static。请参阅https://cmake.org/cmake/help/latest/command/add_library.html
由于您要链接到静态库,因此请更正,我会查看
CMAKE_FIND_LIBRARY_SUFFIXES属性
解决方案 6:
请注意,如果您传递了 -static 选项, gcc 将拒绝链接,但是链接参数中存在动态库 - 如果您只是简单地使用 FindOpenCV.cmake 并且它会拾取动态库(我不知道 OpenCVConfig.cmake 如何表现)...
解决方案 7:
SET (CMAKE_EXE_LINKER_FLAGS "-static")
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件