2013-05-30 41 views
9

後來,我決定升級到GCC 4.8以獲得一些C++ 11功能的早期入門。然而,我還是有一點偏差,直到幾天前一個項目纔開始使用任何新功能(新編譯器似乎一直工作正常,但這可能只是因爲我沒有使用任何新的功能)。如何使用GCC 4.8配置libstdC++?

在這個新項目中,當我用= std = C++ 11標誌編譯時,我沒有任何問題。然而,在運行時,我得到的錯誤:

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.18' not found (required by ./main)`

我認爲有鏈接到與GCC 4.8相關的更現代的libstdC++庫中的問題,但我不能爲我的生活弄清楚如何解決這個問題或者適當的庫應該在哪裏。我記得我象徵性地連接的G ++和gcc的二進制文件GCC-4.8,這似乎是工作,因爲g++ -v回報:

Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/app/gcc/4.8.0/libexec/gcc/i686-pc-linux-gnu/4.8.0/lto-wrapper Target: i686-pc-linux-gnu Configured with: ./gcc-4.8.0/configure --prefix=/app/gcc/4.8.0 Thread model: posix gcc version 4.8.0 (GCC)

另一個線程在線領着我看ldd輸出的方案,該方案讓我看看鏈接到的libstdC++庫的目錄結構與二進制文件的目錄結構不同。但是,我不能在後者中找到合適的libstdc++庫,所以我不確定在哪裏尋找。爲ldd main輸出是:

./main: /usr/lib/i386-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.18' not found (required by ./main) linux-gate.so.1 => (0xb7791000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb768e000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7662000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7644000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb749b000) /lib/ld-linux.so.2 (0xb7792000)`

我不知道究竟是怎麼回事了錯了,我會繼續的谷歌搜索,並四處尋找答案,但你們可以提供任何幫助,將不勝感激。如果對此問題有任何不清楚的地方,或者我忘記了一些信息,請讓我知道,我會盡力將其添加進去。非常感謝!

+0

[Linking g ++ 4.8 to libstdC++](http://stackoverflow.com/questions/17220872/linking-g-4-8-to-libstdc) –

回答

13

您需要告訴您的動態鏈接器(它在您運行程序時執行)在哪裏查找庫。將LD_LIBRARY_PATH設置爲庫的路徑(可能位於/app/gcc/4.8.0/lib之下的某處)。

使用find /app/gcc/4.8.0 -name "libstdc++.so.6"。將該目錄添加到您的LD_LIBRARY_PATH中。例如我提到的路徑:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/gcc/4.8.0/lib(如果您使用的是類似Bourne的shell,它在Linux上是默認的)。

然後嘗試運行您的程序。

如果有效,您可能需要將動態鏈接程序配置爲在不使用LD_LIBRARY_PATH的情況下查看目錄。有關如何配置路徑的詳細信息,請參閱man ld.so

+0

完美,立即工作!我不知道爲什麼我沒有想到在相關的lib目錄中查看,而不是在/ usr/lib中查找......後視鏡始終是20/20。無論如何,再次感謝,我非常感謝幫助! – paul

+0

http://stackoverflow.com/questions/17220872/linking-g-4-8-to-libstdc –

+0

@Guillaume那麼ld.so如何工作?你是否只是從終端運行'ld.so --library-path/app/gcc/4.8.0/lib',並且它總是神奇地用於該用戶系統上的任何地方,就像它在'LD_LIBRARY_PATH' ?如果是這樣,爲什麼比使用'LD_LIBRARY_PATH'更好? –

相關問題