2017-07-06 62 views
1

我想通過SSH在我的機構輸入計算機來編譯程序。我想通過使用不同版本的gccg++來編譯這個程序,也就是更新的版本,並使用默認安裝版本。這意味着我不想使用gcc-4.9.2g++-4.9.2,我想使用gcc-6.3g++-6.3。我可以在我的電腦上找到它們,實際上我有文件夾/opt/gcc-6.3,所以我不必下載它們。所以我要做的就是以下使用不同版本的gcc和g ++編譯問題

export PATH=/opt/gcc-6.3/bin/:$PATH 
export LD_LIBRARY_PATH=/opt/gcc-6.3/lib/:$LD_LIBRARY_PATH 

但同時gcc似乎工作,當我嘗試編譯c++程序與g++我得到

./[name_of_the_program].x: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./[name_of_the_program].x) 
./[name_of_the_program].x: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./[name_of_the_program].x) 

很顯然,如果與自己相關的信息,我不root在這臺機器上。

+0

可能與複製不相容[ '如何解決:[程序名稱] /usr/lib/x86_64-linux-gnu/libstdc++.so.6:版本CXXABI_1.3.8'找不到([程序名稱]需要)(https://stackoverflow.com/問題/ 20357033 /如何對修復程序名-USR-LIB-X86-64-Linux的GNU的libstd c-so-6-version-cxx) –

+1

當影響C++代碼的GCC版本5發生重大變化時。請參閱[關於Dual ABI的在線手冊](https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html)。 –

回答

0

如果在64位計算機上運行,​​則必須添加到您的環境

/opt/linux-gnu_6.x.x/lib64 

路徑也。 (或者你的機器上的路徑用於這個編譯器版本的庫)

如果你獲得root權限,你應該更好的添加(或者你的管理員應該做的!) 庫路徑信息

/etc/ld.so.conf.d/gcc63.conf 

並運行sudo ldconfig

之後,你應該檢查與ldd命令,所有鏈接的要求都滿足。

0

不要這樣做:

export PATH=/opt/gcc-6.3/bin/:$PATH 
export LD_LIBRARY_PATH=/opt/gcc-6.3/lib/:$LD_LIBRARY_PATH 

相反,添加:

-B/opt/gcc-6.3/lib/ 

您調用選項無論是前端gccg++(假設/opt/gcc-6.3/lib/的確實的目錄直接 包含GCC 6.3工具鏈可執行文件和庫)。

參見-Bprefix option

實施例的文檔:

$ cat prog.cpp 
#include <iostream> 

int main() 
{ 
    std::cout << "I was compiled with GCC " 
     << __GNUC__ << '.' << __GNUC_MINOR__ << '.' << __GNUC_PATCHLEVEL__ 
     << " to C++ standard " << __cplusplus << std::endl; 
    return 0; 
} 

$ which g++-4.9 
/usr/bin/g++-4.9 

$ which g++-6 
/usr/bin/g++-6 

$ g++-4.9 -o prog prog.cpp && ./prog 
I was compiled with GCC 4.9.4 to C++ standard 199711 

$ g++-4.9 -B/usr/lib/gcc/x86_64-linux-gnu/6.2.0 -o prog prog.cpp && ./prog 
I was compiled with GCC 6.2.0 to C++ standard 201402 

作爲每他人的評論,請注意克++> = 5是ABI與g++ < 5.