我应该先说我对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")
1条答案
按热度按时间vltsax251#
不针对OpenCV:
前一点将取决于DLL中的API。如果API使用静态库中的类而不是DLL导出的类,则调用模块可能需要静态库来链接这些类。