Linux发行版之间的二进制兼容性
对不起,如果这是一个明显的问题,但我在网上发现了惊人的少数引用...
我正在使用由我们的一个业务合作伙伴用C语言编写的API,并以Fedora 11为基础构建的.so二进制文件提供给我们。我们一直在Fedora 11开发机器上测试API,没有任何问题。 但是,当我尝试与客户的目标平台(恰好是SuSE Enterprise 10.2)上的API进行链接时,出现“文件格式未识别”错误。
也是binutils软件包一部分的命令(如objdump或nm)给我提供了相同的文件格式错误。 “文件”命令显示我:
ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
并且“ldd”命令显示:
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上提供的。 我发布这个问题的机会是,有一种方法可以在我们的合作伙伴的Fedora 11平台上编译代码,以便它也可以在SuSE 10.2上运行。
我认为诀窍在于利用您希望支持的任何平台的最古老的内核和C库版本构建linux的风格。 在我的工作中,我们基于Debian 4,它允许我们以非官方的方式正式支持Debian 4和更高版本,RedHat 3,4,5,SuSE 10以及其他各种发行版(SELinux等)。
我怀疑,通过构建一个不错的新版本的linux,很难在旧机器上支持人员。
(编辑)我应该提到我们使用Debian 4附带的默认编译器,我认为它是GCC 4.1.2。 安装较新的编译器版本往往会使兼容性变得更糟。
Windows在不同的释放,服务包,安装的SDK和一般的DLL(DLL地狱,任何人?)之间具有兼容性问题。 Linux不能解决相同类型的问题。
我见过的兼容性问题包括:
在你的特定情况下,我会让他们在他们的系统上执行“gcc -v”并向你报告gcc版本号。 将其与您正在使用的内容进行比较。
您可能需要掌握该版本的编译器才能使用。
您可以使用Linux应用程序检查器工具([1],[2],[3])来解决Linux发行版之间的应用程序兼容性问题。 它会检查你的文件格式和所有相关的库。 它支持几乎所有流行的Linux发行版,包括所有版本的SuSE和Fedora。
链接地址: http://www.djcxy.com/p/41885.html