【发布时间】:2021-05-12 08:36:10
【问题描述】:
我在 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 附带的旧包含文件,而不是与来自 /usr/local/lib/gcc49/include 的新 gcc 对应的那些文件
我尝试将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++ 完全正常运行吗?
【问题讨论】:
-
你要C++11吗?
-
@Deduplicator 是的,我需要 C++11 支持
-
@mvw,我试过了,同样的问题,似乎无法识别 C++11 标准库的数学部分
-
@vsoftco
round不是std的成员。在没有std::的情况下使用它。它可能是 GCC 扩展。 -
en.cppreference.com/w/cpp/numeric/math/round 是,从 C++11 开始。