我正试图使用CMake在Linux上构建一个基于OpenCV的项目。到目前为止,我的CMakeLists.txt
文件看起来像这样:
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS})
但这将导致动态链接库。我该如何链接静态库?
我正试图使用CMake在Linux上构建一个基于OpenCV的项目。到目前为止,我的CMakeLists.txt
文件看起来像这样:
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS})
但这将导致动态链接库。我该如何链接静态库?
您只需在CMake中将BUILD_SHARED_LIBS
标志设置为false,即可构建静态OpenCV库。 然后,构建使用这些静态库的应用程序所需要的全部内容就是在您的CMakeLists.txt
中添加对OpenCV的依赖项:
FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (your-application ${OpenCV_LIBS})
而 CMake 将会处理所有事情。
BUILD_SHARED_LIBS
,而不是_LIBRARIES
。 :-) - Ela782BUILD_SHARED_LIBS
。不确定这是否是应该记录的CLion问题。 - CODE-REaD实际上,这个问题似乎已经在随OpenCV一起提供的OpenCVConfig.cmake
中得到了解决。您只需要在CMakeLists.txt
中定义OpenCV_STATIC
即可。
set(OpenCV_STATIC ON)
find_package(OpenCV REQUIRED)
如果您希望将所有内容静态链接,我认为您需要使用CMAKE_EXE_LINKER_FLAGS
(添加-static
)。
您是使用OpenCVConfig.cmake的“简单方法”还是旧版的FindOpenCV.cmake?
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
在使用find_library()
之前。FindBoost具有特殊选项来强制使用静态库(Boost_USE_STATIC_LIBS
),但它也通过更改CMAKE_FIND_LIBRARY_SUFFIXES
内部工作。 - marcinSET (CMAKE_EXE_LINKER_FLAGS "-static")