Как скомпилировать OpenCV, статически связанный с libstdc++



Мне нужно скомпилировать OpenCV, статически связанный с libstdc++, чтобы избежать проблем с различными версиями dll libstdc++-6.dll, необходимая Qt5 и OpenCV. Следуя шагам этой статьи: http://www.argong.com/docs/how-to-OpenCV-2.2.0.pdf и добавление строк ниже к спискам CMakeLists.txt, который я ожидал получить в формате OpenCV библиотеки DLL, статически связан с libstdc++, но с использованием 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()
585   1  

1 ответ:

Сначала убедитесь, что вы не тянете зависимости от библиотек, которые ссылаются на общие системные библиотеки. Вы можете, например, включить компиляцию комплектных исходных компонентов, таких как zlib, jpeg и т. д., с флагами BUILD_ZLIB, BUILD_JPEG, и т.д. Вы также можете отключить зависимости от дополнительных компонентов, таких как Vtk (флагWITH_VTK) и других, которые могут уже присутствовать в системе в виде общих библиотек. Затем, если вы создаете OpenCV как общую библиотеку, нажмите на параметр переменной флагов общего компоновщика (CMAKE_SHARED_LINKER_FLAGS) в поле кэш с cmake -C команда:

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

Альтернативно, если вы компилируете OpenCV статически с помощью -DBUILD_SHARED_LIBS=FALSE, Вы можете подключить флаги компоновщика gcc для статического связывания с вашим конечным общим объектом или исполняемым файлом.

Comments

    Ничего не найдено.