2015-02-09 72 views
2

我在FreeBSD10.1上安装了gcc49。我正在尝试将其用于C++ 11开发。然而,每一次我编译一些C++ 11的有效代码(是的,我用-std=c++11)使用特定的数学函数,它吐出来的错误,如g ++包含freebsd上的路径

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 ++的一个bug, Getting GCC in C++11 mode to work on FreeBSD 然而,即使使用-D_GLIBCXX_USE_C99https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194929 建议不能解决问题的数学函数。

最奇怪的是,我可以编译任何其他C++ 11功能不从<cmath>,像std::stol,但必须使用-D_GLIBCXX_USE_C99标志作为上述错误报告提及。

任何想法如何使Free ++ 10.1上的C++ 11充分发挥g ++的作用?

+0

你问C++ 11吗? – Deduplicator 2015-02-09 17:11:27

+0

@Deduplicator是的,我需要C++ 11支持 – vsoftco 2015-02-09 19:51:33

+0

@mvw,我试过,同样的问题,它似乎无法识别C++ 11标准库的数学部分 – vsoftco 2015-02-09 19:52:14

回答

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的包在撰写本文时编译时,仍然存在C++ 11兼容性问题。

+0

对不起,我用gcc5标记了这个问题,但我使用了gcc49。将尝试gcc5。 – vsoftco 2015-02-24 22:37:52

+0

它与gcc48和gcc49的工作方式相同 – Elisey 2015-02-25 20:38:47

+0

我刚刚在VirtualBox中使用了最新的stable 10.1/amd64版本(从FreeBSD的网站freebsd.org/where.html下载了安装程序镜像),并安装了g ++ 49和'pkg安装lang/gcc49'。上面的代码没有编译。你是如何安装编译器的?我没有从源代码编译它。 – vsoftco 2015-02-25 21:03:42