我需要安裝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以查看這是否與特定版本有關,但我又遇到了同樣的錯誤。
我不確定如何進一步處理。任何幫助深表感謝。謝謝。
根據文檔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
有趣的建議。我嘗試了引用鏈接中提到的更改,它使得我遠遠早於前面的錯誤,但最終失敗了,因爲錯誤「gcc-5.3.0/gcc/cp/except.c:1043:未定義對'libc_name_p的引用(char const *,unsigned int)' collect2:error:ld返回1退出狀態''。 – rahul1210
一個一個嘗試這些解決方案? 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