2011-06-08 34 views
10

我試圖運行一些預編譯的代碼,但我得到了以下錯誤:執行二進制:`GLIBCXX_3.4.11' 未找到

./bin/stipdet: /cm/shared/apps/gcc/4.3.4/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./bin/stipdet) 

我一派錯誤,看到一些人解決刪除libstdc++.so.6並添加指向usr/local/lib的新動態鏈接也會出現類似的問題。但我沒有系統上的root訪問權限,所以我不能在該目錄中添加/刪除文件。

有沒有人知道解決這個問題的另一種方法?

UPDATE
我嘗試添加的libstdc++.so.6另一個版本的目錄到LD_PRELOAD,但它沒有工作對我來說,它仍然使用從錯誤的目錄中的文件。

當我在LD_LIBRARY_PATH前面加上正確的目錄時,會發生同樣的情況。最後,我還嘗試從LD_LIBRARY_PATH中刪除所有其他內容,然後添加正確的目錄(只是爲了嘗試)。這似乎解決了原來的錯誤! 但現在我得到同樣的錯誤在不同的位置:

./bin/stipdet: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /var/scratch/user/local/lib/libopencv_features2d.so.2.2) 

顯然opencv使用不同glibcxx版本,所以切換到另一個libstdc休息opencv。有沒有解決這個問題的方法?

回答

4

如果你有正確版本的libstdC++。so.6安裝在其他地方(例如,在你的home目錄),你可以設置LD_LIBRARY_PATH或使用LD_PRELOAD,看到 What is the LD_PRELOAD trick?

+0

謝謝。我用你的建議結果更新了我的問題。當我輸入uname時,它現在會崩潰: – Bart 2011-06-08 21:23:04

0

如果你告訴它會幫助你正在運行什麼操作系統。如果是Solaris,則可能需要嘗試設置LD_NOVERSION以通知運行時鏈接程序忽略共享庫版本。

export LD_NOVERSION=1

+0

- 它表示Linux x86_64 x86_64 x86_64 GNU/Linux。當我登錄到系統時,它顯示「基於CentOS 5」 – Bart 2011-06-09 11:18:21

+1

恐怕沒有LD_NOVERSION等效與Linux。 – jlliagre 2011-06-09 21:12:12

0

的的libstdC++常見問題解答回答你原來的問題:http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths

對於更新,是不應該的。應該在您的LD_LIBRARY_PATH中找到較新的libstdc++.so thaqt提供較舊版本的所有符號。也許/var/scratch/user/local/lib/libopencv_features2d.so.2.2被鏈接到一個絕對路徑,而不是到SONAME libstdc++.so.6,你可以檢查通過運行:

ldd /var/scratch/user/local/lib/libopencv_features2d.so.2.2 
0

我複製的文件A(在/ usr/lib64下/的libstdC++ so.6)到字典中乙(/ opt/MATLAB/MATLAB_Compiler_Runtime/v711/sys/os/glnxa64)和它的工作。