Включить внешние библиотеки при кросс-компиляции

У меня есть проект 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++).

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


person DavSanchez    schedule 20.09.2018    source источник


Ответы (1)


Да, вам нужно будет кросс-компилировать 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 withmingw32-make`. Возможно, вы захотите рассмотреть возможность использования статической компоновки вместо динамической компоновки, но если вы хотите/нужно использовать динамическую компоновку, вам нужно будет скопировать выходные данные сборки opencv в местоположение в Windows и добавить это местоположение в PATH.

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

person Richard Schibly    schedule 21.09.2018