在旧版本的 Linux 上运行我的代码

问题描述 投票:0回答:2

我是 Linux 编程新手,我想知道有没有办法在同一发行版的旧版本 Linux 上运行(而不是重新编译)我的 C++ 可执行文件?

示例:假设我在 RHEL 6 上编译了代码,并希望在 RHEL 4 或 5 上运行我的可执行文件。

在 Windows 中,当我们执行此操作时,我们只需安装 C++ 编译器版本的 C++ 运行时。

示例:如果我使用 VS2012 使用 C++11 构建 C++ 项目,我只需要在客户端计算机上安装 C++11 的 C++ 运行时即可运行我的应用程序,无论我使用什么版本的 Windows(课程从Windows XP开始)

c++ linux c++11
2个回答
1
投票

迄今为止最简单的方法是利用 glibc 和 GCC 运行时库的强大未来兼容性:在您希望其运行的最旧的操作系统上编译可执行文件,并且它应该可以在以后的任何内容上工作而无需重新编译(也就是说,可能需要一些符号链接来满足可执行加载程序期望的依赖关系)。

一般来说,最好为您想要支持的每个发行版进行编译,这样就不会出现意外的冲突。


0
投票

实际上,是的 - 找到您的应用程序 deps(例如:

ldd
)并将它们(例如:
libstdc++.so.6
)从构建系统复制到目标系统上的某个位置(例如:
/mylibs
)。将您的应用程序指向此处(例如:使用 patchelf 的
--rpath
--interpreter
)。您的应用程序应该运行(测试一下!)。如果没有,您的
glibc
可能与旧内核不兼容。您可以通过使用
glibc
--enable-kernel=<version>
开关重新编译所需版本的
./configure
以支持旧内核来解决此问题。如果您所需的
glibc
版本不支持该内核版本,那么您可以在 .so 中提供缺少的函数并使用
LD_PRELOAD
加载它们。

© www.soinside.com 2019 - 2024. All rights reserved.