OpenCV как статическая библиотека (параметры cmake)

Я хочу использовать библиотеку OpenCV во встроенной системе, и мне нужно скомпилировать свой проект, используя OpenCV в качестве статической библиотеки.

Как я могу создать библиотеку, используя параметры cmake?


person Jorge Vega Sánchez    schedule 28.09.2011    source источник


Ответы (1)


Чтобы собрать OpenCV как статическую библиотеку, вам нужно установить флаг BUILD_SHARED_LIBS в false/off:

cmake -DBUILD_SHARED_LIBS=OFF ..

Но я думаю, что этого недостаточно для вашей задачи, потому что вам действительно нужно кросс-компилировать библиотеку для вашей архитектуры. В случае Android или IOS такой порт уже существует, и вы можете просто использовать его. В случае другой платформы вам нужно создать свой собственный файл цепочки инструментов cmake для кросс-компиляции и, возможно, внести ряд исправлений в систему сборки OpenCV.

person Andrey Kamaev    schedule 28.09.2011
comment
Можно ли обойтись без кросс-компиляции для Windows (используя mingw32) каким-нибудь волшебным -DCMAKE_CXX_COMPILER=i586-mingw32msvc-g++? Я вижу преимущества CMake перед автоинструментами, но что такое CMake, эквивалентный ./configure --help? - person Tomasz Gandor; 14.01.2015
comment
@Андрей Камаев, где находится этот флаг? как называется файл? - person Gilad; 26.04.2015
comment
Понятно, это внутри CMAKE(GUI) - person Gilad; 26.04.2015
comment
Даже если установить для флага BUILD_SHARED_LIBS значение OFF, я все равно получаю ссылку на libgstreamer-0.10.so.0. Есть идеи, почему? - person Romanzo Criminale; 29.12.2015
comment
@TomaszGandor ccmake . == ./configure --help - person wener; 07.03.2017
comment
-DBUILD_SHARED_LIBS=OFF тоже создает динамические файлы? - person Francesco Boi; 18.09.2018
comment
@FrancescoBoi, если вы напечатаете варианты, вы получите это // Build shared libraries (.dll/.so) instead of static ones (.lib/.a) BUILD_SHARED_LIBS:BOOL=ON - person Picard; 11.11.2019
comment
@RomanzoCriminale BUILD_SHARED_LIBS только превращает собственные библиотеки OpenCV в статические, но ничего не делает с его (транзитивными) зависимостями, такими как GStreamer. Вам нужно будет создать статические библиотеки всех зависимостей и каким-то образом убедиться, что система сборки OpenCV использует их... это может быть нетривиально. - person Thomas; 09.01.2020