cmake 编译使用OpenCV库而不分发OpenCV的C++库

kt06eoxx  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(111)

我应该先说我对C++编译过程和CMake非常陌生,所以任何信息都将受到欢迎。
我试图编译一个程序,我已经写了一个共享库(.dll为Windows),使用OpenCV库。因此,我将OpenCV编译为静态库(.lib)的集合,将构建文件夹路径添加为环境变量(并更新路径),并将其添加到Visual Studio中的Additional Include Directories。
然而,据我所知,由于我正在编译一个动态链接库,OpenCV.lib文件需要与它一起提供。
有没有办法将OpenCV库与我的库打包在一起,而不打包整个OpenCV源代码?
我目前的CMakeLists.txt如下所示,如果它有帮助的话:

cmake_minimum_required(VERSION 3.9)
set(CMAKE_CXX_STANDARD 17)

PROJECT(MySharedLibrary DESCRIPTION "My Shared Library") 

find_package(OpenCV REQUIRED)
link_directories(${OpenCV_LIBS})

include_directories(
    ${PROJECT_SOURCE_DIR}/include
    ${PROJECT_SOURCE_DIR}/src
    ${OpenCV_INCLUDE_DIRS}
)

file(GLOB all_FILES
    "${PROJECT_SOURCE_DIR}/include/*.hpp"
    "${PROJECT_SOURCE_DIR}/src/program.cpp"
)

###### LIBRARY COMPILATION ######
add_library(MySharedLibrary SHARED ${all_FILES})
target_link_libraries(MySharedLibrary ${OpenCV_LIBS} "-static")
vltsax25

vltsax251#

不针对OpenCV:

  • 如果将静态库链接到DLL中,则不需要将静态库与DLL一起分发。
  • 如果链接的静态库依赖于另一个静态库,则需要同时分发这两个静态库。

前一点将取决于DLL中的API。如果API使用静态库中的类而不是DLL导出的类,则调用模块可能需要静态库来链接这些类。

相关问题