无法将OpenCV中的.dll与CMake一起使用



我有以下CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project( project_360_visual )
find_package( OpenCV REQUIRED )
set(SOURCE_FILES 
${CMAKE_SOURCE_DIR}/src/project_360_visual.cpp
${CMAKE_SOURCE_DIR}/src/projection.cpp)
set(INCLUDE_FILES
${CMAKE_SOURCE_DIR}/include/project_360_visual.h
${CMAKE_SOURCE_DIR}/include/projection.h)
LINK_DIRECTORIES(c:/opencv/build/bin/Release)
add_library(opencv_tracking430 SHARED IMPORTED GLOBAL)
set_target_properties(opencv_tracking430 PROPERTIES IMPORTED_LOCATION c:/opencv/build/bin/Release/opencv_tracking430.dll)
add_executable( project_360_visual ${SOURCE_FILES} ${INCLUDE_FILES})
target_include_directories(project_360_visual PUBLIC ${CMAKE_SOURCE_DIR}/include)
target_link_libraries( project_360_visual PUBLIC ${OpenCV_LIBS} opencv_tracking430)

相关的Visual Studio项目是使用生成的

cmake ../ -G "Visual Studio 15 2017 Win64" -DCMAKE_PREFIX_PATH=c:/opencv/build

然而,无论我做什么,我都无法在OpenCV中正确链接/导入共享库。有人能帮我解决这个问题吗?

这是我尝试构建时从Visual Studio得到的当前输出:

1>------ Build started: Project: ZERO_CHECK, Configuration: Release x64 ------
1>Checking Build System
1>CMake is re-running because C:/Projects/candido/CG/build/CMakeFiles/generate.stamp is out-of-date.
1>  the file 'C:/Projects/candido/CG/CMakeLists.txt'
1>  is newer than 'C:/Projects/candido/CG/build/CMakeFiles/generate.stamp.depend'
1>  result='-1'
1>-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18362.
1>-- Configuring done
1>-- Generating done
1>-- Build files have been written to: C:/Projects/candido/CG/build
2>------ Build started: Project: project_360_visual, Configuration: Release x64 ------
2>LINK : fatal error LNK1181: cannot open input file 'opencv_tracking430-NOTFOUND.obj'
2>Done building project "project_360_visual.vcxproj" -- FAILED.
========== Build: 1 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

更新

根据建议尝试了以下两种变体。

变体1:以下内容未编译:

cmake_minimum_required(VERSION 3.12)
project( project_360_visual )
find_package( OpenCV REQUIRED )
set(SOURCE_FILES 
${CMAKE_SOURCE_DIR}/src/project_360_visual.cpp
${CMAKE_SOURCE_DIR}/src/projection.cpp)
set(INCLUDE_FILES
${CMAKE_SOURCE_DIR}/include/project_360_visual.h
${CMAKE_SOURCE_DIR}/include/projection.h)
#Linking shared libraries
add_library(opencv_tracking430 IMPORTED GLOBAL)
set_target_properties(opencv_tracking430 PROPERTIES IMPORTED_LOCATION 
c:/opencv/build/bin/Release/opencv_tracking430.lib
)
add_executable( project_360_visual ${SOURCE_FILES} ${INCLUDE_FILES})
target_include_directories(project_360_visual PUBLIC ${CMAKE_SOURCE_DIR}/include)
target_link_libraries( project_360_visual PUBLIC ${OpenCV_LIBS} opencv_tracking430)

错误:

1>------ Build started: Project: ZERO_CHECK, Configuration: Release x64 ------
1>Checking Build System
1>CMake is re-running because C:/Projects/candido/CG/build/CMakeFiles/generate.stamp is out-of-date.
1>  the file 'C:/Projects/candido/CG/CMakeLists.txt'
1>  is newer than 'C:/Projects/candido/CG/build/CMakeFiles/generate.stamp.depend'
1>  result='-1'
1>-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18362.
1>CMake Error at CMakeLists.txt:13 (add_library):
1>  add_library called with IMPORTED argument but no library type.
1>
1>
1>CMake Error at CMakeLists.txt:14 (set_target_properties):
1>  set_target_properties Can not find target to add properties to:
1>  opencv_tracking430
1>
1>
1>-- Configuring incomplete, errors occurred!
1>See also "C:/Projects/candido/CG/build/CMakeFiles/CMakeOutput.log".
1>CMake Configure step failed.  Build files cannot be regenerated correctly.  Attempting to stop IDE build.
1>C:Program Files (x86)Microsoft Visual Studio2017ProfessionalCommon7IDEVCVCTargetsMicrosoft.CppCommon.targets(209,5): error MSB6006: "cmd.exe" exited with code 1.
1>Done building project "ZERO_CHECK.vcxproj" -- FAILED.
2>------ Build started: Project: project_360_visual, Configuration: Release x64 ------
2>Building Custom Rule C:/Projects/candido/CG/CMakeLists.txt
2>CMake is re-running because C:/Projects/candido/CG/build/CMakeFiles/generate.stamp is out-of-date.
2>  the file 'C:/Projects/candido/CG/CMakeLists.txt'
2>  is newer than 'C:/Projects/candido/CG/build/CMakeFiles/generate.stamp.depend'
2>  result='-1'
2>-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18362.
2>CMake Error at CMakeLists.txt:13 (add_library):
2>  add_library called with IMPORTED argument but no library type.
2>
2>
2>CMake Error at CMakeLists.txt:14 (set_target_properties):
2>  set_target_properties Can not find target to add properties to:
2>  opencv_tracking430
2>
2>
2>-- Configuring incomplete, errors occurred!
2>See also "C:/Projects/candido/CG/build/CMakeFiles/CMakeOutput.log".
2>C:Program Files (x86)Microsoft Visual Studio2017ProfessionalCommon7IDEVCVCTargetsMicrosoft.CppCommon.targets(209,5): error MSB6006: "cmd.exe" exited with code 1.
2>Done building project "project_360_visual.vcxproj" -- FAILED.
========== Build: 0 succeeded, 2 failed, 0 up-to-date, 0 skipped ==========

变体2

这会编译,但在运行时它会抱怨找不到相关的.dll

cmake_minimum_required(VERSION 3.12)
project( project_360_visual )
find_package( OpenCV REQUIRED )
set(SOURCE_FILES 
${CMAKE_SOURCE_DIR}/src/project_360_visual.cpp
${CMAKE_SOURCE_DIR}/src/projection.cpp)
set(INCLUDE_FILES
${CMAKE_SOURCE_DIR}/include/project_360_visual.h
${CMAKE_SOURCE_DIR}/include/projection.h)
#Linking shared libraries
add_library(opencv_tracking430 SHARED IMPORTED GLOBAL)
set_target_properties(opencv_tracking430 PROPERTIES IMPORTED_LOCATION 
c:/opencv/build/bin/Release/opencv_tracking430.dll
)
set_target_properties(opencv_tracking430 PROPERTIES IMPORTED_IMPLIB
c:/opencv/build/lib/Release/opencv_tracking430.lib
)
add_executable( project_360_visual ${SOURCE_FILES} ${INCLUDE_FILES})
target_include_directories(project_360_visual PUBLIC ${CMAKE_SOURCE_DIR}/include)
target_link_libraries( project_360_visual PUBLIC ${OpenCV_LIBS} opencv_tracking430)

您不链接DLL库。这些文件用于运行时加载程序。通常,DLL将与.lib导入库配对,可以使用该库进行链接。使用成对的.lib导入和链接DLL的CMake语法如下(也使用IMPORTED_IMPLIB(:

add_library(opencv_tracking430 SHARED IMPORTED GLOBAL)
set_target_properties(opencv_tracking430 PROPERTIES IMPORTED_LOCATION 
c:/opencv/build/bin/Release/opencv_tracking430.dll
)
set_target_properties(opencv_tracking430 PROPERTIES IMPORTED_IMPLIB
c:/opencv/build/bin/Release/opencv_tracking430.lib
)

最新更新