2015-02-09 44 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