G++ 包含 FreeBSD 上的路径
g++ include paths on freebsd
我在 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++ 中的一个错误,让 GCC 进入 C++11 模式以在 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 上使 g++ 与 C++11 完全功能吗?
它在 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 兼容性问题。
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 从函数角度看ID到文件路径的内部与外部映射
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 按边长度递归搜索图中所有可行路径
- 使用变量值作为 PlaySound 中的路径
- 如何转换真实路径 CString c++
- 从 GUID 获取 USB 卷路径
- 查找 GCD:并非所有控制路径都返回值
- C++17 文件系统::remove_all 带有通配符路径
- 在带有尾部斜杠的路径上返回 std::filesystem::create_directories() 的值
- 获取当前正在运行的 exe 名称(不是路径)
- 如何从 Skia 路径几何体中获取网格?
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- G++ 包含 FreeBSD 上的路径