我在 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 附带的旧包含文件,而不是与新的 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
然而即使使用 -D_GLIBCXX_USE_C99
正如 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194929 中所建议的那样
没有解决数学函数的问题。
最奇怪的是我可以编译任何其他 C++11 函数 不是来自 <cmath>
, 比如 std::stol
, 但必须使用 -D_GLIBCXX_USE_C99
上面错误报告中提到的标记。
知道如何在 FreeBSD 10.1 上使用 C++11 使 g++ 完全发挥作用吗?
最佳答案
它在 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 是从 ports 编译的,据报告包无法工作。可能是因为 10.1 的包在编写时是在 10.0 上编译的,它仍然存在 c++11 兼容性问题。
关于c++ - g++ 在 freebsd 上包含路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415149/