我正在编译solaris 5.11上的代码。G++版本为4.8.2。
相同的代码在Ubuntu上工作,但给出了错误: solaris上没有在此作用域中声明to_string()。
我浏览了许多链接,并尝试了以下几点:
上述两件事都行不通。
有和Solaris有关的事吗?
实际代码非常庞大。因此,在下面的示例代码中模拟错误。
temp.cpp
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
int i = 10;
str = "john age is " + to_string(i);
cout << str;
return 0;
}
命令: g++ temp.cpp -std=c++0x -o temp
发布于 2017-11-01 11:45:28
GCC 4.8.2有条件地定义了to_string
函数,具体如下:
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
GLIBCXX_USE_C99
宏依赖于操作系统支持的大量C99函数,因此在Solaris上构建GCC时可能找不到必要的C99库函数。因此,to_string
定义是不存在的。
在GCC的当前版本中,条件更加细粒度,并检查C99函数是否以C++98模式和C++11定义,因此没有任何C99函数并不会禁用所有功能:
#if __cplusplus >= 201103L
//...
#if _GLIBCXX_USE_C99_STDIO
这是不可能支持这些改进GCC 4.8,所以你可能需要更新到至少GCC 6。
发布于 2017-11-01 11:53:02
使用std=c++11编译如下
g++ -std=c++11 filename.cc
注意:编译器必须支持c++11
https://stackoverflow.com/questions/47053711
复制相似问题