Я пытаюсь скомпилировать образец из boost-asio на Solaris-10 с использованием SunStudio 12.4. Компиляция с GCC 4.9.2 работает, но по линии мне потребуется поддержка обоих компиляторов, поэтому просто переключение - это не вариант.Solaris SunStudio 12.4 Стандартная библиотека, связанная с проблемой
выход CC -V:CC: Sun C++ 5.13 SunOS_sparc 2014/10/20
Компиляция Line: (для каждого CPP файл)
CC -m32 -std=c++11 -I./asio-1.10.6/include -I./boost/include/boost-1_58 -c *.cpp -o *.o
Linker Line: (обратите внимание, что * .o на самом деле список всех ранее созданных объектных файлов)
CC -m32 -L./boost/sparc/sun/release32/lib *.o -o httpServer -lCrun -lCstd -lxnet -lboost_system
Проблема:
Я получаю кучу нечитаемых символов для стандартного материала библиотеки (например, строка, ios_base, локали и т.д.). Я опубликовал ошибки компоновщика here.
Я сильно подозреваю, что это связано с использованием -std=c++11
. Я включил этот вариант из-за проблемы с компиляцией с iterator_traits
. Хотя iterator_traits
не является функцией C++ 11, по какой-то причине SunStudio не может скомпилировать его, если он не компилируется в режиме C++ 11. Ошибка относительно iterator_traits
:
Error: iterator_traits is not a member of std.
код вызывает это компилировать отказ в наддува boost/detail/iterator.hpp
. Далее следует код.
// (C) Copyright David Abrahams 2002.
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef ITERATOR_DWA122600_HPP_
#define ITERATOR_DWA122600_HPP_
// This header is obsolete and will be deprecated.
#include <iterator>
namespace boost
{
namespace detail
{
using std::iterator_traits;
using std::distance;
} // namespace detail
} // namespace boost
#endif // ITERATOR_DWA122600_HPP_
Другие вещи, которые включают в себя и использовать этот заголовок генерируют ошибки как Error: iterator_traits is not a member of boost::detail
, а затем и другие синтаксические ошибки, потому что теперь он думает, что все следующий код неверен.
Другие вещи, которые я пробовал:
- Добавление -lc Перед -lCrun (линкер не может найти эту библиотеку)
- Добавление -lc (подобный вопрос).
- Проверено в каталоге SUNWspro/libs и установлено, что libCrun.so и libCstd.so существуют.
- Ввод -lCstd Перед -lCrun
Другой (менее релевантной) Информации:
- SPARC
- В ASIO на образце в вопросе является HTTPServer (я считаю, что в каталоге сервера в примерах)
Я удалил свой ответ, потому что я думаю, что был неправ. Возможно, я раньше замалчивал ваши ошибки компоновщика. –
Попробуйте добавить -lstdC++ в свои аргументы компилятора. –
@TechnikEmpire компоновщик не может найти библиотеку sdtC++. Также в предыдущем комментарии вы предложили добавить -lm. Я тоже это пробовал, и хотя компоновщик может его найти, это не имеет значения. – Maria