构建在内核版本X.XX上的C++ Linux应用程序是否会在早期版本上运行?

问题描述:

这个问题可能看起来非常明显,我意识到我正在为大量的downvotes投入自己的力量,但我对Linux开发非常陌生,并且一直在努力。构建在内核版本X.XX上的C++ Linux应用程序是否会在早期版本上运行?

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

+0

好吧,**大部分时间**,内核向后兼容*几年后*。你使用的是什么类型的功能?你的应用做什么? –

+0

TCP套接字,串口通信,也将在某些时候使用CANBUS。基本上用于硬件控制的命令行应用我已经被派去这样做了,基本上已经被抛进了深处并挣扎了一点点 – mathematician1975

大多数情况下,它不是阻止你的内核,它是glibc。

glibc是向后兼容的,这意味着编译和链接到旧版本的程序将在运行时与新版本完全相同。另一种方式是不兼容的。

最好的当然是要建立在你要运行它的发行。如果你不能这样做,建立一个最老的glibc安装。

它也很难超过系统的glibc建立并链接到一个旧的glibc,安装/建筑glibc的趋向弄乱你的系统更比它的价值。使用旧版Linux设置虚拟机,然后使用它。