Как скомпилировать 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()
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