Как собрать Boost V1.57 с помощью компилятора Solaris Studio 12.4

Я пытался собрать Boost V1.57 с новым компилятором Solaris Studio 12.4 на платформе Intel Solaris V11.2. Я пытался опубликовать ошибки на OTN форум развития но оказалось, что мой простой OTN-аккаунт не позволяет мне добавлять новые сообщения. Отсюда и вопрос к ТАК.

Краткое содержание:
1) Начальная загрузка прошла нормально:

cd tools/build
./bootstrap.sh --with-toolset=sun

2) Построить командную строку (обратите внимание, что я поставил b2 и компилятор в моем PATH). Это «этап» сборки, то есть без установки, просто чтобы увидеть, что можно собрать все библиотеки:

b2 -j2 --build-dir=build toolset=sun address-model=64 threading=multi variant=release  stage >& /tmp/boost_1_57_build.log

Вот сжатый список ошибок:

"./boost/archive/binary_iarchive.hpp", line 57: Error: Multiple declaration for adjust_counter.
"./boost/archive/binary_iarchive.hpp", line 57: Error: Unexpected type name "get_counter<boost::archive::binary_iarchive>::type" encountered.
"./boost/archive/binary_oarchive.hpp", line 57: Error: Multiple declaration for adjust_counter.
"./boost/archive/binary_oarchive.hpp", line 57: Error: Unexpected type name "get_counter<boost::archive::binary_oarchive>::type" encountered.
"./boost/archive/detail/register_archive.hpp", line 45: Error: The function "adjust_counter" must have a prototype.
"./boost/archive/detail/register_archive.hpp", line 46: Error: Expression must have a constant value.
"./boost/archive/detail/register_archive.hpp", line 47: Error: Expression must have a constant value.
"./boost/archive/detail/register_archive.hpp", line 48: Error: An integer constant expression is required within the array subscript operator.
"./boost/archive/polymorphic_iarchive.hpp", line 170: Error: Multiple declaration for adjust_counter.
"./boost/archive/polymorphic_iarchive.hpp", line 170: Error: Unexpected type name "get_counter<boost::archive::polymorphic_iarchive>::type" encountered.
"./boost/archive/polymorphic_oarchive.hpp", line 153: Error: Multiple declaration for adjust_counter.
"./boost/archive/polymorphic_oarchive.hpp", line 153: Error: Unexpected type name "get_counter<boost::archive::polymorphic_oarchive>::type" encountered.
"./boost/archive/text_iarchive.hpp", line 136: Error: Multiple declaration for adjust_counter.
"./boost/archive/text_iarchive.hpp", line 136: Error: Unexpected type name "get_counter<boost::archive::text_iarchive>::type" encountered.
"./boost/archive/text_oarchive.hpp", line 121: Error: Multiple declaration for adjust_counter.
"./boost/archive/text_oarchive.hpp", line 121: Error: Unexpected type name "get_counter<boost::archive::text_oarchive>::type" encountered.
"./boost/archive/text_wiarchive.hpp", line 132: Error: Multiple declaration for adjust_counter.
"./boost/archive/text_wiarchive.hpp", line 132: Error: Unexpected type name "get_counter<boost::archive::text_wiarchive>::type" encountered.
"./boost/archive/text_woarchive.hpp", line 146: Error: Multiple declaration for adjust_counter.
"./boost/archive/text_woarchive.hpp", line 146: Error: Unexpected type name "get_counter<boost::archive::text_woarchive>::type" encountered.
"./boost/archive/xml_iarchive.hpp", line 146: Error: Multiple declaration for adjust_counter.
"./boost/archive/xml_iarchive.hpp", line 146: Error: Unexpected type name "get_counter<boost::archive::xml_iarchive>::type" encountered.
"./boost/archive/xml_oarchive.hpp", line 135: Error: Multiple declaration for adjust_counter.
"./boost/archive/xml_oarchive.hpp", line 135: Error: Unexpected type name "get_counter<boost::archive::xml_oarchive>::type" encountered.
"./boost/archive/xml_wiarchive.hpp", line 152: Error: Multiple declaration for adjust_counter.
"./boost/archive/xml_wiarchive.hpp", line 152: Error: Unexpected type name "get_counter<boost::archive::xml_wiarchive>::type" encountered.
"./boost/archive/xml_woarchive.hpp", line 142: Error: Multiple declaration for adjust_counter.
"./boost/archive/xml_woarchive.hpp", line 142: Error: Unexpected type name "get_counter<boost::archive::xml_woarchive>::type" encountered.
"./boost/math/cstdfloat/cstdfloat_types.hpp", line 378: Error: The type "boost::STATIC_ASSERTION_FAILURE<0>" is incomplete.
"/opt/solarisstudio12.4/lib/compilers/include/CC/stlport4/stl/_algo.c", line 436: Error: The function "lrand48" must have a prototype.
"/usr/include/stdlib.h", line 113: Error: putenv(char*) was declared before with a different language.
"libs/atomic/src/lockpool.cpp", line 74: Error: "}" expected instead of ",".
"libs/context/src/unsupported.cpp", line 7: Error: #error "platform not supported".
"libs/log/src/date_time_format_parser.cpp", line 399: Error: Linker scopes may not change after symbol definition.
"libs/log/src/date_time_format_parser.cpp", line 412: Error: Linker scopes may not change after symbol definition.

IMO любой достойный компилятор C ++ должен иметь возможность собирать Boost, так как я вряд ли могу представить какой-либо серьезный проект C ++ без библиотек Boost. Поэтому мне просто интересно, читает ли разработчик Boost или Solaris Studio это и помогает мне с некоторыми исправлениями …

Большое спасибо за любые подсказки!

0

Решение

Первое, что нужно знать о сборке Boost с Solaris Studio, это то, что файл Jam не обновлялся более 5 лет и использует STLport в качестве стандартной библиотеки C ++. Это может быть не то, что вы хотите. Solaris Studio 12.4 можно запустить в режиме C ++ 11, где она использует GNU libstdc ++ для предоставления своей стандартной библиотеки. Даже если вы работаете в режиме по умолчанию C ++ 03, вы, вероятно, захотите использовать стандартную библиотеку Apache C ++. Если вы не используете STLport для остальной части своего кода C ++, задайте другой вопрос об изменении файлов Boost Jam для Solaris Studio для использования другой стандартной библиотеки.

Переходя к точным сообщениям об ошибках, которые вы видите, я думаю, что все в библиотеке архива имеют одну и ту же причину, и ее легко исправить. Отредактируйте boost / archive / detail / register_archive.hpp и измените строку 31 из:

#ifdef __SUNPRO_CC

чтобы:

#if 0

Давным-давно кто-то добавил обходной путь для ошибки в старой версии Solaris Studio, но теперь Solaris Studio 12.4 находит недопустимый код обходного пути, но может справиться с кодом, который видят все другие компиляторы.

Для сообщения «платформа не поддерживается» из контекстной библиотеки вам не повезло, если вы находитесь в Solaris, но, возможно, это не имеет значения, если вы не используете эту конкретную библиотеку Boost.

Ошибки «Области компоновщика могут не измениться после определения символа» вызваны попыткой использования директив видимости символов Solaris. Я думаю, что разработчикам Boost лучше всего отказаться от них, учитывая, что они больше не тестируют на Solaris, потому что видимость по умолчанию является глобальной и, по крайней мере, работает. Чтобы сделать все символы глобальными и избежать этих проблем, отредактируйте boost / config / compiler / sunpro_cc.hpp и удалите следующие строки:

//
// Dynamic shared object (DSO) and dynamic-link library (DLL) support
//
#if __SUNPRO_CC > 0x500
#  define BOOST_SYMBOL_EXPORT __global
#  define BOOST_SYMBOL_IMPORT __global
#  define BOOST_SYMBOL_VISIBLE __global
#endif

а также отредактируйте libs / math / build / Jamfile.v2 и удалите эту строку:

<toolset>sun:<cxxflags>-xldscope=hidden

Для последних нескольких ошибок вы вставили больше контекста, чтобы увидеть, откуда они берутся.

2

Другие решения


По вопросам рекламы [email protected]