Building Boost для статического соединения (MinGW)

Я создаю Boost (я использую System и FileSystem) для MinGW с помощью bjam:

bjam --toolset=gcc stage

И он строит отлично, но я хочу иметь возможность статически ссылаться на него (у меня должен быть один файл для конечного продукта), поэтому я попытался:

bjam --link=static --toolset=gcc stage

Но я получаю тот же результат. Любые идеи?

отредактируйте второй вопрос подряд Я ответил на несколько минут после публикации: p угадать, что я оставлю это здесь для других.

bjam --build-type=complete --toolset=gcc stage

Будет уверенно строить как динамические, так и статические.

Ответ 1

Я думаю, что ссылка - это свойство, а не опция для bjam. Это означает, что перед ним не должно быть.

Это моя командная строка для создания только статических библиотек (visual С++ хотя):

bjam install --toolset=msvc variant=release link=static threading=multi runtime-link=static

Сопоставляя это с вашей исходной командой сборки, я бы сказал, что она должна выглядеть примерно так:

bjam --toolset=gcc link=static stage

или, возможно:

bjam stage --toolset=gcc link=static

Попробуйте запустить

bjam --help

для получения дополнительной информации о свойствах и параметрах для bjam.

Ответ 2

Просто хочу отметить, что с новым повышением (февраль 2011 г.) вам также нужно построить bjam. По какой-то причине текущий загружаемый bjam не работает чисто.

Итак, сначала:

cd ...\boost_1_45_0\tools\build\v2\engine\src

build.bat mingw

Вам нужно добавить bjam в PATH (из панели управления, а не только из командной строки). Тогда

cd ...\boost_1_45_0\

bjam --build-type=complete --toolset=gcc stage

Моя настройка - Vista, Boost 1.45, MinGW 4.5 и создание из cmd.exe not msys.

http://code-slim-jim.blogspot.com/2011/02/boost-in-vista-using-mingw-and-cmdexe.html

Ответ 3

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

Когда вы пишете "У меня должен быть один файл...", вы имеете в виду, что вам нужна одна библиотека, содержащая все библиотеки boost? Если это так, я подозреваю, что вам, возможно, придется "собрать" их вместе.

Ответ 4

Я использую следующую командную строку для создания как статически связанных, так и динамически связанных версий boost:

bjam  "-sBUILD=debug release <runtime-link>static/dynamic <threading>multi" stage

Это делается с визуальным С++ на окнах YMMV.