簡體   English   中英

使用不同版本的gcc和g ++進行編譯時出現問題

[英]Issue compiling with different version of gcc and g++

我想通過SSH輸入我所在機構的計算機來編譯程序。 我想使用不同版本的gccg++編譯該程序,即使用repsect的最新版本安裝到默認安裝的版本。 這意味着我要使用gcc-6.3g++-6.3而不是gcc-4.9.2g++-4.9.2 我可以在我的計算機上找到它們,實際上,我的文件夾是/opt/gcc-6.3 ,因此不必下載它們。 所以我要做的是

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

但是雖然gcc似乎可以工作,但是當我嘗試使用g++編譯c++程序時,我得到了

./[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這台機器上。

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

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

通往您環境的道路。 (或您的計算機上的哪個路徑用於此編譯器版本的庫)

如果您具有root用戶訪問權限,則最好將(或也許您的管理員應該這樣做)您的庫路徑信息添加到

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

並運行sudo ldconfig

之后,您應該使用ldd comand檢查,是否滿足所有鏈接的要求。

不要這樣做:

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選項的文檔

例:

$ 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

根據其他人的評論,請注意g ++> = 5是ABI與g++ <5不兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM