【问题标题】:How to compile OpenCV statically linked with libstdc++如何编译与 libstdc++ 静态链接的 OpenCV
【发布时间】:2013-03-02 02:49:13
【问题描述】:

我需要编译与 libstdc++ 静态链接的 OpenCV,以避免 Qt5 和 OpenCV 所需的 libstdc++-6.dll 的不同 dll 版本的问题。按照本文的步骤:http://www.argong.com/docs/how-to-OpenCV-2.2.0.pdf 并将下面的行添加到 CMakeLists.txt 我希望获得与 libstdc++ 静态链接的 OpenCV DLL,但 OpenCV 继续依赖于 libstdc++-6.dll。让 OpenCV 库与 libstdc++ 静态链接,我做错了什么?

  if (MINGW)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
    set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc -s")
    set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS} -static-libgcc -static-libstdc++ -s")
  endif()

【问题讨论】:

  • 你尝试编译哪个版本?
  • OpenCV 2.4.4 与 CMake 2.8.10 和 MinGW 4.7
  • 我有一个类似的问题:我使用 -static-libdstdc++,但结果仍然包含 DLL,所以感觉 -static 命令行选项没有做它应该做的事情。我还得到了 gcc DLL,并且 -static 选项本身也没有效果......我检查了 VERBOSE 以确保它会出现在链接器的命令行上,它确实......我们做错了什么?
  • mingw 可能没有该选项有效,前几天我在文章中读到,其中任何一个选项都需要特定版本的 gcc(可能接近 4.8)

标签: opencv mingw


【解决方案1】:

首先确保您没有对链接到共享系统库的库进行依赖。例如,您可以使用标志 BUILD_ZLIBBUILD_JPEG 等启用捆绑源组件(如 zlib、jpeg 等)的编译。您还可以禁用对可选组件(如 Vtk(WITH_VTK 标志)和其他可能的组件的依赖项)已经作为共享库存在于系统中。然后,如果您将 OpenCV 构建为共享库,请使用 cmake -C 命令将设置推送到缓存中的共享链接器标志变量 (CMAKE_SHARED_LINKER_FLAGS):

set(CMAKE_SHARED_LINKER_FLAGS "-static -static-libgcc -static-libstdc++" CACHE INTERNAL "" FORCE)

或者,如果您使用-DBUILD_SHARED_LIBS=FALSE 静态编译 OpenCV,您可以插入 gcc 链接器标志以在最终共享对象或可执行文件上进行静态链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多