我想通过SSH
在我所在的机构输入计算机来编译程序。我想使用不同版本的gcc
和g++
来编译此程序,这是一个更新的版本,具有对默认安装版本的重新定位。这意味着我不想使用gcc-4.9.2
和g++-4.9.2
,而是使用gcc-6.3
和g++-6.3
。我可以在我的电脑上找到它们,实际上我有/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
似乎有用,但当我尝试使用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 :(得分:0)
如果您在64位计算机上运行,则必须添加
/opt/linux-gnu_6.x.x/lib64
路径也适合你的环境。 (或者您的机器上的哪个路径用于此编译器版本的库)
如果您获得root访问权限,则最好添加(或者管理员应该这样做!) 您的图书馆路径信息
/etc/ld.so.conf.d/gcc63.conf
并运行sudo ldconfig
。
之后,您应该与ldd
命令一起检查,是否满足所有链式要求。
答案 1 :(得分: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/
指向前端gcc
或g++
的调用选项(假设/opt/gcc-6.3/lib/
确实是直接的目录
包含GCC 6.3工具链可执行文件和库。)
示例:
$ 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
与其他人一样&#39;注释,请注意g ++&gt; = 5是ABI与g++
不兼容的&lt; 5.