我是Linux编程的新手,我想知道,有没有办法在同一发行版的旧版Linux上运行(不重新编译)我的C ++可执行文件?
示例:假设我在RHEL 6上编译了我的代码,并希望在RHEL 4或5上运行我的可执行文件。
在Windows中,当我们这样做时,我们只安装C ++编译器版本的C ++运行库。
示例:如果我使用VS2012使用C ++ 11构建C ++项目,我只需在客户端计算机上安装C ++ 11的C ++运行库即可运行我的应用程序,无论我使用的是哪个版本的Windows (当然从Windows XP开始)
答案 0 :(得分:1)
迄今为止最简单的方法是利用glibc和GCC运行时库的强大未来兼容性:在您希望它运行的最旧的操作系统上编译您的可执行文件,它应该可以在以后执行任何操作而无需重新编译(是的,可能需要一些符号链接来满足可执行加载程序所期望的依赖关系。)
通常,最好为要支持的每个发行版编译它,因此不会出现意外冲突。
答案 1 :(得分:0)
实际上,是的 - 找到你的应用程序deps(使用例如:ldd
)并将它们(例如:libstdc++.so.6
)从构建系统复制到目标系统的某个位置(例如:{{1} })。将您的应用指向此处(例如:使用patchelf的/mylibs
和--rpath
)。你的应用应该运行(测试它!)。如果不是,则--interpreter
可能与旧内核不兼容。您可以通过使用glibc
glibc
开关重新编译所需的--enable-kernel=<version>
版本以支持旧内核来解决此问题。如果您所需的./configure
版本不支持该内核版本,那么您可以在.so中提供缺少的函数,并使用glibc
加载它们。