I'm trying to compile a sample from boost-asio on Solaris-10 using SunStudio 12.4. Compiling with GCC 4.9.2 works, but down the line I will be required to support both compilers, so just switching is not an option.
CC -V output: CC: Sun C++ 5.13 SunOS_sparc 2014/10/20
Compilation Line: (for each cpp file)
CC -m32 -std=c++11 -I./asio-1.10.6/include -I./boost/include/boost-1_58 -c *.cpp -o *.o
Linker Line: (note that *.o is actually a list of all the object files previously generated)
CC -m32 -L./boost/sparc/sun/release32/lib *.o -o httpServer -lCrun -lCstd -lxnet -lboost_system
The Problem:
I get a bunch of unresolved symbols for standard library stuff (like string, ios_base, locale, etc.). I posted the linker errors here.
I strongly suspect that this is related to the use of -std=c++11
. I included this option because of a compilation issue with iterator_traits
. Even though iterator_traits
is not a C++11 feature, for some reason SunStudio can't compile it unless it is compiling in c++11 mode. The error regarding iterator_traits
:
Error: iterator_traits is not a member of std.
The code causing this compile failure is in boost boost/detail/iterator.hpp
. Code follows.
// (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_
Other things which include and use this header generate errors like Error: iterator_traits is not a member of boost::detail
, and then other syntax errors because now it thinks all the following code is invalid.
Other Things I've Tried:
- Adding -lC before -lCrun (the linker can't find that library)
- Adding -lc (similar issue).
- Checked in the SUNWspro/libs directory and found that libCrun.so and libCstd.so both exist.
- Putting -lCstd before -lCrun
Other (Less Relevant) Information:
- SPARC
- the asio sample in question is the httpServer (I believe it's under the server directory in examples)