我在FreeBSD10.1上安装了gcc49。我正在尝试将它用于C ++ 11开发。但是,每次我编译一些使用特定数学函数的C ++ 11有效代码(是的,我使用-std=c++11
)时,它都会抛出错误,例如
error: std::round is not a member of std
/usr/include/math.h
例如,在这里:
#include <cmath>
#include <iostream>
int main()
{
std::cout << std::round(10.1) << std::endl;
}
所以它似乎尝试使用FreeBSD附带的旧的include文件,而不是gcc
/usr/local/lib/gcc49/include
对应的文件
我尝试将CPLUS_INCLUDE_PATH
设置为/usr/local/lib/gcc49/include
但没有运气,系统仍尝试搜索/usr/include
。
我看到这可能是FreeBSD g ++中的一个错误,
Getting GCC in C++11 mode to work on FreeBSD
然而,即使使用https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194929中建议的-D_GLIBCXX_USE_C99
没有解决数学函数的问题。
最奇怪的是,我可以编译任何其他C ++ 11函数而不是 <cmath>
,例如std::stol
,但必须使用-D_GLIBCXX_USE_C99
上面的错误报告中提到的标志。
任何想法如何在FreeBSD 10.1上使用C ++ 11使g ++完全正常运行?
答案 0 :(得分:1)
它在10.1开箱即用,你不需要任何黑客攻击。当然,它只适用于-std = c ++ 11,因为std :: round仅在11标准后可用(参见http://en.cppreference.com/w/cpp/numeric/math/round)。
$ freebsd-version -ku
10.1-RELEASE
10.1-RELEASE
$ cat test.cc
#include <cmath>
#include <iostream>
int main() {
std::cout << std::round(10.1) << std::endl;
}
$ g++5 -std=c++11 -o test test.cc
$ ./test
10
注意:gcc是从端口编译的,报告包不起作用。可能是因为10.1的包是在编写10.0时编写的,它仍然存在c ++ 11兼容性问题。