如何编译OpenCV与libstdc++静态链接



我需要编译与libstdc++静态链接的OpenCV,以避免Qt5和OpenCV需要libstdc++-6.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()

首先确保您没有拉出链接到共享系统库的库的依赖项。例如,您可以启用编译捆绑的源组件,如zlib、jpeg等,标记为BUILD_ZLIBBUILD_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链接器标志。

相关内容

  • 没有找到相关文章

最新更新