Compile Boost как статическая универсальная двоичная библиотека - PullRequest
4 голосов
/ 13 мая 2010

Я хочу иметь статическую универсальную двоичную библиотеку Boost. (Предпочтительно последняя стабильная версия, то есть 1.43.0 или новее.)

Я нашел много обращений Google с похожими проблемами и возможными решениями. Однако большинство из них выглядит устаревшим. Также ни один из них действительно не работал.

Прямо сейчас я пытаюсь

sudo ./bjam --toolset=darwin --link=static --threading=multi \
--architecture=combined --address-model=32_64 \
--macosx-version=10.4 --macosx-version-min=10.4 \
install

Это прекрасно компилируется и устанавливается. Однако полученные двоичные файлы кажутся сломанными.

az@ip245 47 (openlierox) %file /usr/local/lib/libboost_signals.a
/usr/local/lib/libboost_signals.a: current ar archive random library

az@ip245 49 (openlierox) %lipo -info  /usr/local/lib/libboost_signals.a
input file /usr/local/lib/libboost_signals.a is not a fat file
Non-fat file: /usr/local/lib/libboost_signals.a is architecture: x86_64

Редактировать: Кажется, что команда была неправильной, и я должен удалить "-" для большинства параметров. Итак, команда, которую я сейчас пытаюсь (-a просто означает перестроить все):

sudo ./bjam -a toolset=darwin link=static threading=multi \
architecture=combined address-model=32_64 \
macosx-version=10.4 macosx-version-min=10.4 \
install

Однако, это дает много странных ошибок (которые у меня уже были ранее), все это так:

darwin.compile.c++.pch bin.v2/libs/math/build/darwin-4.2.1/release/address-model-32_64/architecture-combined/link-static/macosx-version-min-10.4/macosx-version-10.4/threading-multi/../src/tr1/pch.hpp.gch
In file included from ./boost/math/special_functions/acosh.hpp:18,
                 from ./boost/math/special_functions.hpp:15,
                 from libs/math/build/../src/tr1/pch.hpp:9:
./boost/config/no_tr1/cmath.hpp:21:19: error: cmath: No such file or directory

Это может быть еще одна проблема, с которой я сталкиваюсь при сборке универсальных двоичных файлов: g ++ на MacOSX не работает с -arch ppc64

Ответы [ 3 ]

2 голосов
/ 14 мая 2010

Мы используем Boost, скомпилированный для 10.4, здесь, на работе. Мы не используем GCC 4.2, но используем GCC 4.0, так как Apple GCC 4.2 не поддерживается для MacOS 10.4 SDK. Для этого вам нужен пользовательский конфигурационный файл bjam, например. пользователь конфигурация-darwin.jam. Вот содержимое нашего. Измените к своему сердцу содержание:

# Boost.Build Configuration

    # Compiler configuration
using darwin : 8.11 : /usr/bin/g++-4.0 : 
    <architecture>"combined"
    <address-model>"32" # this can be changed to 32_64 for 32/64 universal builds
    <macosx-version>"10.4"
    <macosx-version-min>"10.4"
#   <root>"/Developer"
    <compileflags>""
    <linkflags>"" ; 

Затем вы должны указать bjam использовать файл конфигурации пользователя jam при компиляции:

bjam --user-config=user-config-darwin.jam ... (your other options go here) ...

Теперь вам не нужно связываться с символическими ссылками в системных каталогах SDK.

2 голосов
/ 14 мая 2010

Я нашел проблему. Похоже, что в MacOSX 10.4 SDK отсутствует куча символических ссылок для GCC 4.2.

Используйте это как контрольный пример: g ++ на MacOSX не работает с -arch ppc64

Он сообщит о множественных ошибках с GCC 4.2 (отсутствие включений в C ++, отсутствие включений в C, отсутствие библиотек). Во всех случаях вы можете просто исправить это, установив символическую ссылку. Найдите в вашем SDK файл и просто установите символическую ссылку так же, как в MacOSX 10.5 SDK.

После этого все просто заработало.

1 голос
/ 04 февраля 2011

Для создания 4-х сторонних универсальных надстроечных статических файлов в OSX 10.6 я делаю следующее:

  1. Скачать буст с сайта буста.

  2. Извлеките архив и компакт-диск в папку boost_1_xx_0 (где xx - это версия boost, которую вы используете).

  3. Пробег:

    ./bootstrap.sh, а затем

    ./bjam macosx-version=10.6 macosx-version-min=10.4 architecture=combined threading=multi link=static address-model=32_64

Это скомпилирует все, кроме Boost.MPI (для которого требуется параметр --with-mpi). Продукты сборки помещаются в ./stage

...