Включить внешние библиотеки при кросс-компиляции - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть проект C ++, который использует OpenCV.Он компилируется и корректно работает на Mac, но я хотел бы создать исполняемый файл Windows с моего компьютера Mac.Я установил MinGW-W64 через Homebrew.

У меня есть следующие сомнения.Как мне сказать, чтобы MinGW-W64 использовал библиотеки OpenCV для кросс-компиляции?Как и ожидалось, просто замена g++ на x86_64-w64-mingw32-g++ не работает, выводит множество ошибок, связанных с тем, что функции OpenCV не были объявлены.

Я прочитал, что необходимо также кросс-компилировать библиотеки OpenCV, но я не знаю, что именно это значит.Неужели мне нужно создать промежуточные *.o файлы из моей локальной установки OpenCV и связать их с файлами *.o моего собственного кода C ++ для окончательной генерации .exe вывода?И все это с использованием x86_64-w64-mingw32-g++?

Если да, я не очень разбираюсь в таких инструментах, как Make или CMake, но я думаю, что есть способ автоматизировать весь процесс (мой make-файл очень прост,просто генерирует исполняемый файл непосредственно из источника с помощью одной команды g++.

Может ли кто-нибудь указать мне правильное направление в этом отношении?Заранее спасибо!

1 Ответ

0 голосов
/ 21 сентября 2018

Да, вам нужно будет кросс-компилировать OpenCV с mingw для кросс-компиляции вашего проекта для Windows.Это означает, что вам нужно будет клонировать исходный код и выполнить инструкции по сборке с использованием компилятора mingw.После того, как вы соберете OpenCV с помощью mingw, вам нужно будет указать проекту, чтобы эти библиотеки использовались при кросс-компиляции.

Хранилище OpenCV использует и содержит файлы cmake для сборки библиотек.В общем, cmake используется для генерации make-файлов, а затем для сборки вы запускаете make с созданными make-файлами.Поскольку вы хотите кросс-компиляцию, вам нужно будет указать cmake генерировать make-файлы, которые работают с mingw32-make вместо make (так как ming32-make будет использовать mingw g ++ вместо обычного g ++).Чтобы cmake генерировал make-файлы mingw, вы бы назвали его с помощью этого -G "MinGW Makefiles" and then build with mingw32-make`.Возможно, вы захотите использовать статическое связывание вместо динамического связывания, но если вы хотите / хотите использовать динамическое связывание, вам нужно будет скопировать выходные данные сборки opencv в папку в Windows и добавить это местоположение в PATH.

Имейте в виду, что включение флага поддержки CUDA может не работать при кросс-компиляции OpenCV с mingw.(Я недавно не проверял, но мне кажется, что я это помню)

...