![](/img/trans.png)
[英]MinGW g++/gcc not compiling with proper path and version command working
[英]Issue compiling with different version of gcc and g++
我想通過SSH
輸入我所在機構的計算機來編譯程序。 我想使用不同版本的gcc
和g++
編譯該程序,即使用repsect的最新版本安裝到默認安裝的版本。 這意味着我要使用gcc-6.3
和g++-6.3
而不是gcc-4.9.2
和g++-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/
前端gcc
或g++
的調用選項(假設/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.