2016-08-12 52 views
0

我在C++上构建了一个exec,但是当我将它部署到部署机器时,发现如下错误:'Dev production libc/libstdC++ mismatch [链接libc.so.6/libstdC++。so.6与旧版本]

/lib64/libc.so.6: version GLIBC_2.14 not found /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.14 not found /usr/lib64/libstdc++.so.6: version CXXABI_1.3.5 not found

这原来是因为在部署机器是基于RHEL系统与旧的libc(2.12)/的libstdC++(3.4.13),而我的机器是用的Ubuntu近远内核和库。不幸的是,我无法升级部署系统。

我尝试了一些常用的方法来处理这种像静态链接(libc失败)并将我的库版本复制到集群(并使用LD_PRELOAD和-Wl,-rpath选项运行),但它没有工作。我也在我的机器上安装了一个旧版本的gcc,但这也不起作用。

有什么办法可以让这个工作(也许在我的本地机器上创建对象代码,并在另一台机器上连接它)。或者有没有办法在部署机器上编译代码而无需将源代码复制到它。 这可以从部署机器获取系统库的副本并尝试让gcc与它们链接吗? (有任何问题,以及如何做正确)

相关Compile with older libc (version `GLIBC_2.14' not found)Deploying Yesod to Heroku, can't build staticallyBuild and run C++ code on different version of Linux and glibc

我知道通过虚拟机做到这一点的一种方式,但我想如果可能的话,以避免它。 (HT Mat)

+0

解决方法:在您的开发盒上创建一个具有与生产目标相同操作系统版本的虚拟机。用它来编译**和测试**。 – Mat

+0

是创建虚拟机是可能的,我想尽量避免,如果可能的话。相关说明哪个虚拟机可能适合在Ubuntu上部署rhel。 – ssj3892414

+0

静态链接需要您需要的'glibc-static'和其他静态库档案。如果您没有静态库存档,则无法链接静态。 – alvits

回答

0

使用-static-libstdc++选项编译应用程序。

+0

我试过了,问题表明它似乎不能正常工作。 – ssj3892414

+0

这将有助于'libstdC++',但不会与GLIBC。 –

+0

尽管它确实解决了所有libstdC++问题,但只保留了glibc – ssj3892414

相关问题