2016-12-18 36 views
6

我需要安裝CUDA工具包的GCC的較早版本,因爲CUDA工具包不支持比5.3.1更新的GCC,並且我試圖安裝它的Fedora機器來自GCC 6.我對這臺機器沒有太多的控制,所以我不得不自己去建立GCC。我遵循的步驟是:由於C++ 11錯誤,無法構建GCC

$ cd gcc-5.3.0 
$ contrib/download_prerequisites 
$ cd ../build 
$ ../gcc-5.3.0/configure --prefix=$HOME/local/gcc-5.3.0 --program-suffix=5.3 --enable-shared --enable-multiarch --enable-threads=posix --enable-languages=c,c++,fortran --enable-checking=release --with-tune=generic 
$ make 

這導致成功configure,但make失敗,錯誤:

cfns.gperf:101:1: error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute 

還有一大堆其他的C++ 11個的警告也是如此。經過一番谷歌搜索之後,我發現這與GCC 6構建GCC 5或更早版本有關。我認爲如果我可以強制編譯器遵循C++ 98,它可能會有所幫助。所以,我試過:

$ export CXXFLAGS="-std=gnu++98" 
$ ../gcc-5.3.0/configure ... 
$ make 

沒有工作。我仍然繼續得到相同的C++ 11警告,並且構建失敗,出現完全相同的錯誤。然後,我試着:

$ ../gcc-5.3.0/configure CXXFLAGS="-std=gnu++98" ... 
$ make 

同樣的錯誤。我這次偷看了Makefile文件,它確實有CXXFLAGS設置爲-std=gnu++98這裏和那裏。另外,我也嘗試構建GCC 4.9.3以查看這是否與特定版本有關,但我又遇到了同樣的錯誤。

我不確定如何進一步處理。任何幫助深表感謝。謝謝。

+1

根據文檔https://gcc.gnu.org/onlinedocs/gcc/Inline.html,'gnu_inline'是對c99之前的C代碼的gcc擴展。由於您有源代碼,因此您可以找到導致錯誤的文件,並嘗試將違規聲明更改爲「inline」,以便遵循C99/11和C++語法或「__INLINE」或「__inline__」。我的猜測是,你的C++代碼包含一些爲C99以前的c代碼編寫的頭文件。更多信息在這裏:https://gcc.gnu.org/ml/gcc-patches/2015-08/msg00375.html – user3528438

+0

有趣的建議。我嘗試了引用鏈接中提到的更改,它使得我遠遠早於前面的錯誤,但最終失敗了,因爲錯誤「gcc-5.3.0/gcc/cp/except.c:1043:未定義對'libc_name_p的引用(char const *,unsigned int)' collect2:error:ld返回1退出狀態''。 – rahul1210

+0

一個一個嘗試這些解決方案? https://www.google.com/search?q=undefined+reference+to+%60libc_name_p&rlz=1CAASUE_enUS669US669&oq=undefined+reference+to+%60libc_name_p&aqs=chrome..69i57&sourceid=chrome&ie=UTF-8 – user3528438

回答

7

如果別人有這個問題,顯然它被這個patch固定。如果您對GCC源文件進行了建議的更改(這裏提到的內容太冗長,但手動完成的操作非常簡單),那麼configuremake即可成功運行,而無需通過-std選項。我使用GCC 6.2.1成功構建了GCC 5.3.0,並對源文件進行了這些更改。

相關問題