【问题标题】:Compiling OpenCV without Visual C++ runtime dependency在没有 Visual C++ 运行时依赖的情况下编译 OpenCV
【发布时间】:2022-08-18 23:31:54
【问题描述】:

我正在尝试使用 cMake 3.23 和 Visual Studio 2022 编译 OpenCV 4.6.0,我需要确保它不依赖于 VC++ 运行时 DLL。
问题是无论我做什么,opencv_world460.dll最终将依赖于VCRUNTIME140.DLLVCRUNTIME140_1.DLL
请注意,我正在使用具有版本号的 Visual Studio 202217,但编译的dll依赖于版本14运行时。为什么?
我也取消了BUILD_WITH_STATIC_CRT 的勾选,结果还是一样。
那么如何确保我的 DLL 不依赖于任何 VCRUNTIMExxx.DLL

  • 数字只是令人困惑。版本 17 适用于 IDE、Visual Studio。 “平台工具包”仍然是第 14 版。
  • 您正在尝试做的是一个完整的静态链接应用程序。我不确定 MSVC 是否会再允许这样做。事实上,编译器将始终使用运行时提供的库。您只是试图将它与您的应用程序代码捆绑在一起,而不必单独安装它或期望它出现在目标系统上。我假设?
  • @MikelF MSVC 通过设置允许它运行时库属性 >> 配置属性 >> C/C++ >> 代码生成/MT对于发布和/MTd用于调试。但我想从 CMake 强制执行此设置。
  • 这回答了你的问题了吗? Compile with /MT instead of /MD using CMake
  • @MikelF 已经试过了,没用。

标签: c++ opencv visual-c++ opencv3.0


【解决方案1】:

我发现的唯一解决方案是取消选中 BUILD_SHARED_LIBSBUILD_opencv_world 并创建静态.lib然后我将这些库链接到我的应用程序中的文件。
请记住使用此方法,因为您不创建世界包,您将必须链接许多如下所示的库。所有这些文件都将位于\opencv-4.6.0\Build\install\x64\vc17\staticlib 文件夹中。

#if defined(_DEBUG)
#pragma comment(lib, "opencv_core460d")
#pragma comment(lib, "opencv_imgproc460d")
#pragma comment(lib, "opencv_highgui460d")
#pragma comment(lib, "opencv_ml460d")
#pragma comment(lib, "opencv_video460d")
#pragma comment(lib, "opencv_features2d460d")
#pragma comment(lib, "opencv_calib3d460d")
#pragma comment(lib, "opencv_objdetect460d")
#pragma comment(lib, "opencv_imgcodecs460d")
#pragma comment(lib, "opencv_flann460d")
#pragma comment(lib, "aded")
#pragma comment(lib, "IlmImfd")
#pragma comment(lib, "ippiwd")
#pragma comment(lib, "ittnotifyd")
#pragma comment(lib, "libjpeg-turbod")
#pragma comment(lib, "libopenjp2d")
#pragma comment(lib, "libpngd")
#pragma comment(lib, "libprotobufd")
#pragma comment(lib, "libtiffd")
#pragma comment(lib, "libwebpd")
#pragma comment(lib, "quircd")
#pragma comment(lib, "zlibd")
#else
#pragma comment(lib, "opencv_core460")
#pragma comment(lib, "opencv_imgproc460")
#pragma comment(lib, "opencv_highgui460")
#pragma comment(lib, "opencv_ml460")
#pragma comment(lib, "opencv_video460")
#pragma comment(lib, "opencv_features2d460")
#pragma comment(lib, "opencv_calib3d460")
#pragma comment(lib, "opencv_objdetect460")
#pragma comment(lib, "opencv_imgcodecs460")
#pragma comment(lib, "opencv_flann460")
#pragma comment(lib, "ade")
#pragma comment(lib, "IlmImf")
#pragma comment(lib, "ippiw")
#pragma comment(lib, "ittnotify")
#pragma comment(lib, "libjpeg-turbo")
#pragma comment(lib, "libopenjp2")
#pragma comment(lib, "libpng")
#pragma comment(lib, "libprotobuf")
#pragma comment(lib, "libtiff")
#pragma comment(lib, "libwebp")
#pragma comment(lib, "quirc")
#pragma comment(lib, "zlib")
#endif
#pragma comment(lib, "ippicvmt")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2011-08-09
    • 1970-01-01
    • 2021-07-31
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多