我正在尝试使用SunStudio 12.4从Solaris-10上的boost-asio编译一个示例。用GCC 4.9.2编译是可行的,但是我需要支持这两个编译器,所以仅仅切换不是一种选择。
CC -V输出: CC: Sun C++ 5.13 SunOS_sparc 2014/10/20
编译行:(对于每个cpp文件)
CC -m32 -std=c++11 -I./asio-1.10.6/include -I./boost/include/boost-1_58 -c *.cpp -o *.o
链接行:(注意*.o实际上是以前生成的所有对象文件的列表)
CC -m32 -L./boost/sparc/sun/release32/lib *.o -o httpServer -lCrun -lCstd -lxnet -lboost_system
问题:
对于标准库内容,我得到了一堆未解决的符号(如string、ios_base、locale等)。我发布了链接器错误这里。
我强烈怀疑这与-std=c++11的使用有关。我之所以包括这个选项,是因为iterator_traits存在编译问题。尽管iterator_traits不是C++11特性,但由于某种原因,SunStudio无法编译它,除非它是以c++11模式编译。关于iterator_traits的错误
Error: iterator_traits is not a member of std.
导致此编译失败的代码位于boost 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这样的错误,然后产生其他语法错误,因为现在它认为以下所有代码都是无效的。
其他我尝试过的事情:
其他(不太相关)信息:
发布于 2015-04-22 01:44:41
来自“文件”:
在C++ 11模式下,CC编译器使用提供的g++ ABI和g++运行时库的一个版本。对于这个版本,使用了g++运行时库的4.8.2版本。 ABI描述生成的对象代码中的低级细节。使用不同ABI的模块不能成功地链接到程序中。--这意味着您必须在程序中的所有模块上使用C++11模式,或者没有一个模块是。
因此,您必须将“-std=c++11”指定到链接器阶段。你现在不能这么做。
https://stackoverflow.com/questions/29784788
复制相似问题