2017-07-14 46 views
0

我需要在我的机器上编译C++程序并在另一台机器上远程运行它。我最新的GLIBCXX版本是3.4.21。我想运行的机器只能达到GLIBCXX_3.4.2。所以当我尝试运行时,我得到这个错误。在计算机集群上本地安装GLIBCXX_3.4.21

./test_x: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./test_x) 

我没有权限在远程计算机上更新到GCLIBCXX_3.4.21,所以我想知道是否有可能在本地安装GLIBCXX_3.4.21因为我没有在集群中的root权限?

+0

不,这是不可能的,因为libstdC++不可能是唯一的依赖项。用较新版本的gcc和libstdC++编译的程序没有很好的机会与较旧的libstdC++一起运行。更不用说其他的操作系统也可能拥有较老的图书馆,同样的问题;即使链接,它可能会因为这个原因而崩溃。忘掉整个事情。你在浪费你的时间。 –

+0

然后我可以降级我的版本并尝试编译这种方式吗? –

+1

您必须降级不仅仅是'libstdC++',而且还要降级所有其他依赖项。此时,您最好使用较旧的操作系统安装VM,并将您的codez构建在与目标部署平台相同的平台上。这就是虚拟机的用途。 –

回答

0

请注意,GLIBCXX没有与GLIBC - 它是一个版本符号使用libstdc++.so并且是海湾合作委员会的一部分。

是的:将您的本地版本libstdc++.so.6复制到群集并使您的程序使用它是很简单的。

假设您将您的可执行文件复制到/cluster/radwa/foo。然后将您的本地libstdc++.so.6复制到/cluster/radwaexport LD_LIBRARY_PATH=/cluster/radwa或链接foo可执行文件与-Wl,-rpath=/cluster/radwa