Boost-Build: сборка исполняемого файла для windows из linux - PullRequest
3 голосов
/ 22 апреля 2011

У меня есть кодовая база c ++, которая мне нужна для сборки версий для windows и unix. Важно, чтобы исполняемый файл windows работал без установленного Cygwin или подобного. О, и я пытаюсь добиться этого с помощью Ubuntu.

Я пытался выяснить, как заставить буст-билд позаботиться об этом, но до сих пор не дотянулся. Для простоты предположим, что структура этого проекта:

root/
|- src/
|  |- core/
|  |  |- number.cpp
|  |  |- number.hpp
|  |- main.cpp
|- jamroot

Пытаясь заставить boost-build производить двоичные файлы Windows в качестве первого шага, я создаю файл user-config.jam в своем домашнем каталоге, содержащий следующее:

using gcc : 4.4 : i586-mingw32msvc-g++ : <rc>i586-mingw32msvc-windres <archiver>i586-mingw32msvc-ar ;

Мой файл jamroot выглядит так:

exe hello :
    [ glob-tree *.cpp ]
    : : <target-os>windows
;

Но когда я запускаю bjam, я получаю исполняемый файл Unix (без расширения), но не исполняемый файл Windows. Переименование приложения с расширением .exe и запуск на Windows не работает. Я пробовал различные варианты для bjam, например bjam --toolset=gcc --target-os=windows, bjam --toolset=gcc-mingw --target-os=windows и т. Д., Но, кажется, замечание работает ..

Для записи, mingw правильно установлен и работает. Вызов компилятора вручную приводит к правильным выходным файлам.

Есть идеи?

Кроме того, как мне заставить bjam создать версию для каждого набора инструментов, указанного в моем файле user-config.jam?

Бонусный вопрос: В конце концов, мне нужно связать одну библиотеку надстроек и одну предварительно созданную библиотеку. Как мне указать разные библиотеки для разных целевых систем?

ОБНОВЛЕНИЕ Я скачал скрипт с http://mingw -cross-env.nongnu.org / , который позволил мне скомпилировать mingw, а также повысить библиотеки за один раз, поэтому об этой проблеме позаботились ... Я нашел способ заставить bjam вызывать компилятор mingw (я на другом компьютере, поэтому не могу найти решение в настоящее время). Другие вопросы до сих пор не решены.

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

К сожалению, я не думаю, что это можно сделать (я много раз терпел неудачу), и я думаю, что причина в том, что mingw не поддерживается для компиляции Boost.Единственный способ, которым люди, кажется, достигли этого, - это поддерживать отдельную среду сборки под win32 с использованием MS Visual Studio.

Из вашего вопроса неясно, используете ли вы bjam для сборки своего приложения илипросто пытаюсь собрать версии Windows библиотек Boost (файлы .lib или .dll), чтобы позже связать их с вашим приложением.В своих попытках я пытался сделать это «обычным» способом, так как версии библиотек Boost для Windows компилируются, затем приложение компилируется отдельно с помощью mingw32 и связывается с Boost.

К сожалению, мой камень преткновения такя могу получить только два результата: либо сборка завершается неудачно при компиляции Boost в динамические библиотеки Win32 (.dll), либо статические библиотеки win32 создаются успешно, но тогда libtool отказывается связывать их с приложением .

Посмотрите файл PKGBUILD , который Arch Linux использует для компиляции mingw32-boost, так как вы можете получить некоторые подсказки о том, как они это делают.Кажется, что bjam threadapi=win32 target-os=windows достаточно.Не забудьте правильно установить префикс, чтобы не перезаписывать собственные библиотеки версиями win32!

0 голосов
/ 28 апреля 2011

На моем Ubuntu Box это так же просто, как

sudo apt-get install mingw

, а затем построить

export CC=i586-mingw32msvc-gcc
make 

Profit!

...