我有一个程序依赖于
#include <fstream>
#include <vector>
#include <opencv2/opencv.hpp>
其
CMakeLists
如下
cmake_minimum_required(VERSION 3.5)
project(CirclesDetectionProject VERSION 0.1)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
# OpenCV
find_package(OpenCV REQUIRED PATHS "C:/opencv/build/x64/mingw64/")
include_directories(${OpenCV_INCLUDE_DIRS})
set(PROJECT_SOURCES
main.cpp
)
add_executable(CirclesDetection ${PROJECT_SOURCES})
target_link_libraries(CirclesDetection ${OpenCV_LIBS})
我在 Windows 10 上使用 VScode,代码使用
mingw32-make
正确编译和运行。
我的问题是如何生成可以在其他不一定安装依赖项的 Windows 计算机上运行的可执行文件?
我使用了
CFE explorer
,它告诉你exe需要的所有ddls,这非常有用。就我而言,它表明我有这些依赖项:
libwinpthread-1.dll
libopencv_core480.dll
libopencv_imgcodecs480.dll
liboopencv_imgproc480.dll
kernel32.dll
msvcrt.dll
对于
libwinpthread-1.dll
,我必须将其添加到我的CMakeLists
以确保静态链接:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libgcc -static-libstdc++")
然后对于
OpenCV
,我确实以静态模式从源代码重新编译了它,并使用静态版本的 OpenCV 重新编译了我的代码。确保它使用的是静态的:
set(OpenCV_DIR "C:/opencv-4.7.0-static/build/x64/mingw64/")
find_package(OpenCV REQUIRED)
最后,对于
kernel32.dll
和msvcrt.dll
,它们是标准的Windows系统库,它们存在于每台Windows机器上,所以你不必担心它们。