【问题标题】:Will a C++ Linux app built on version X.XX of the kernel run on an earlier version?基于 X.XX 版本内核构建的 C++ Linux 应用程序是否可以在早期版本上运行?
【发布时间】:2012-06-13 11:49:31
【问题描述】:

这个问题可能看起来非常明显,我意识到我正在为大量的反对票而自责,但我对 Linux 开发人员非常陌生,并且只研究了一段时间。

我一直在用 C++ 在 ubuntu 12.04(内核 3.2.0)上编写应用程序,然后通过 scp 将其复制到另一台设备上的 ubuntu 8.04(内核 2.6.30)安装。我一直注意到一些我根本无法解释的非常奇怪的行为。我天真地假设我可以在以前的版本上运行这个可执行文件,但我开始意识到事实可能并非如此。将来我必须确保我构建应用程序的 Linux 版本与它将在现场运行的版本相同吗?或者我必须直接在将要运行的设备上直接从源代码构建应用程序吗???我对 Linux 开发人员非常陌生,但对 C++ 并不陌生,所以我意识到这个问题可能看起来很简单,但这是我在书籍/教程等中根本没有见过的问题。

【问题讨论】:

  • 嗯,大多数时候,内核向后兼容 几年后。你使用什么样的功能?你的应用是做什么的?
  • TCP 套接字、串行端口通信也将在某个时候使用 CANBUS。基本上用于硬件控制的命令行应用程序。我被指派做这件事,基本上已经陷入困境并有点挣扎

标签: c++ linux ubuntu


【解决方案1】:

大多数时候,阻止你的不是内核,而是 glibc。

glibc 是向后兼容的,这意味着编译和链接到旧版本的程序在运行时与新版本完全相同。反之则不兼容。

最好的当然是在你想运行它的发行版上构建。如果您不能这样做,请在具有最旧 glibc 安装的版本上构建。

构建和链接到比系统 glibc 更旧的 glibc 也非常困难,安装/构建 glibc 往往会使您的系统更加混乱。使用旧 Linux 设置 VM,然后改用它。

【讨论】:

  • 嗨,您提到“大多数时候,阻止您的不是内核,而是 glibc”。我很好奇 linux 应用程序依赖于内核版本的例外情况。谢谢!
  • @HCSF 好吧,一些应用程序可能依赖于一个不存在的内核接口,或者在您想要运行它的内核版本中不再存在。如果编写正确,则可以通过 glibc 访问该接口,但没有什么能阻止您跳过该层。可能还有更多内容,但这是我脑海中所知道的全部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 2021-02-14
  • 2014-07-22
相关资源
最近更新 更多