首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux发行版之间的二进制兼容性

Linux发行版之间的二进制兼容性
EN

Stack Overflow用户
提问于 2009-11-20 23:47:45
回答 5查看 4.7K关注 0票数 5

如果这是一个显而易见的问题,我很抱歉,但我在web上找到的参考文献令人惊讶地很少…

我正在使用我们的一个业务合作伙伴用C语言编写的应用程序接口,它以.so二进制文件的形式提供给我们,构建在Fedora11上。我们已经在Fedora11开发机器上测试了该应用程序接口,没有任何问题。但是,当我尝试在客户的目标平台(恰好是SuSE Enterprise10.2)上链接该应用程序接口时,我得到了一个“文件格式无法识别”错误。

同样包含在binutils包中的命令,比如objdump或nm,也会给出同样的文件格式错误。"file“命令向我显示:

代码语言:javascript
复制
ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped

"ldd“命令显示:

代码语言:javascript
复制
ldd: warning: you do not have execution permission for `./libuscuavactivity.so.1.1'
./libuscuavactivity.so.1.1: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./libuscuavactivity.so.1.1)
[dependent library list]

我猜这是因为两个平台上的C库不兼容,问题是代码是用新版本的glibc等编译的,而不是SuSE 10.2上可用的版本。我发布这个问题的目的是希望有一种方法可以在我们合作伙伴的Fedora11平台上编译代码,使其也能在SuSE 10.2上运行。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-21 00:29:00

我认为诀窍是在linux的基础上,使用您希望支持的任何平台的最旧内核和C库版本进行构建。在我的工作中,我们建立在Debian4的基础上,它允许我们正式支持Debian4和更高版本,RedHat 3, 4,5,SuSE 10以及各种其他发行版(SELinux等)。以非官方的方式。

我怀疑,通过构建一个漂亮的新版本的linux,很难在较老的机器上支持人们。

(编辑)我应该提一下,我们使用的是Debian4附带的默认编译器,我认为是GCC 4.1.2。安装较新的编译器版本往往会使兼容性变得更差。

票数 3
EN

Stack Overflow用户

发布于 2009-11-21 00:10:38

Windows在不同版本、服务包、已安装的SDK和DLL之间的兼容性方面存在问题(DLL Hell,任何人?)。Linux也不能幸免于同样的问题。

我看到的兼容性问题包括:

  • 运行时库更改
  • 链接库更改
  • 内核changes
  • Compiler技术更改(例如: EGCS之前和之后的版本。这可能是您的issue).
  • Packager问题(转速与APT)

在你的特殊情况下,我会让他们在他们的系统上做一个"gcc -v“,并向你报告gcc的版本号。将其与您正在使用的代码进行比较。

您可能需要获得该版本的编译器来构建您的另一半。

票数 3
EN

Stack Overflow用户

发布于 2011-01-16 05:03:43

您可以使用Linux应用检查工具([1][2][3])来解决应用在Linux发行版之间的兼容性问题。它将检查您的文件格式和所有依赖库。它支持几乎所有流行的Linux发行版,包括所有版本的SuSE和Fedora。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1771366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档