2017-07-06 63 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.