2017-01-08 24 views
0

我剛剛編譯了gcc的中繼版本,但是當使用g ++編譯C++項目時,我發現應該存在的標準庫組件(如std::conjunction)缺失。當我檢查我的本地存儲庫(gcc_trunk/libstdc++-v3/include/std)中的代碼時,一切似乎都在那裏。我如何確保我使用的是正確版本的libstdc++如何使用正確的libstdC++?

下面是我用各自的輸出

$ readelf -d /usr/lib64/libstdc++.so.6檢查系統中的一些命令| grep的SONAME

0x000000000000000e (SONAME)    Library soname: [libstdc++.so.6] 

$ ls -l命令/usr/lib/libstdc++.so.6

lrwxrwxrwx 1 root root 19 Jan 7 13:19 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.23 

有什麼想法?

+0

設置LD_LIBRARY_PATH – stark

回答

0

我假設你已經安裝了新的GCC到一些非標準的位置(即不在/usr),所以在運行時你的應用程序嘗試使用不兼容的主機/usr/lib/libstdc++.so。爲了解決這個問題,你可以做的

  • 要麼LD_LIBRARY_PATH集運行你的應用程序,以指向新的GCC庫文件夾
  • -Wl,-rpath
  • 靜態鏈接您的應用程序通過-static-libstdc++libstdc++鏈接(這是部分解決其它編譯器的庫,例如libgcc.so仍然將來自主機GCC)
+0

但我有一個編譯時錯誤,這不可能是一個運行時錯誤(如:'conjunction'不是std的成員) –

+0

我建議你在你的問題中提供更多細節。例如。 atm目前還不清楚它是運行時還是編譯時錯誤... – yugr