如果这是一个显而易见的问题,我很抱歉,但我在web上找到的参考文献令人惊讶地很少…
我正在使用我们的一个业务合作伙伴用C语言编写的应用程序接口,它以.so二进制文件的形式提供给我们,构建在Fedora11上。我们已经在Fedora11开发机器上测试了该应用程序接口,没有任何问题。但是,当我尝试在客户的目标平台(恰好是SuSE Enterprise10.2)上链接该应用程序接口时,我得到了一个“文件格式无法识别”错误。
同样包含在binutils包中的命令,比如objdump或nm,也会给出同样的文件格式错误。"file“命令向我显示:
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上可用的版本。我发布这个问题的目的是希望有一种方法可以在我们合作伙伴的Fedora11平台上编译代码,使其也能在SuSE 10.2上运行。
发布于 2009-11-21 00:29:00
我认为诀窍是在linux的基础上,使用您希望支持的任何平台的最旧内核和C库版本进行构建。在我的工作中,我们建立在Debian4的基础上,它允许我们正式支持Debian4和更高版本,RedHat 3, 4,5,SuSE 10以及各种其他发行版(SELinux等)。以非官方的方式。
我怀疑,通过构建一个漂亮的新版本的linux,很难在较老的机器上支持人们。
(编辑)我应该提一下,我们使用的是Debian4附带的默认编译器,我认为是GCC 4.1.2。安装较新的编译器版本往往会使兼容性变得更差。
发布于 2009-11-21 00:10:38
Windows在不同版本、服务包、已安装的SDK和DLL之间的兼容性方面存在问题(DLL Hell,任何人?)。Linux也不能幸免于同样的问题。
我看到的兼容性问题包括:
在你的特殊情况下,我会让他们在他们的系统上做一个"gcc -v“,并向你报告gcc的版本号。将其与您正在使用的代码进行比较。
您可能需要获得该版本的编译器来构建您的另一半。
发布于 2011-01-16 05:03:43
您可以使用Linux应用检查工具([1]、[2]、[3])来解决应用在Linux发行版之间的兼容性问题。它将检查您的文件格式和所有依赖库。它支持几乎所有流行的Linux发行版,包括所有版本的SuSE和Fedora。

https://stackoverflow.com/questions/1771366
复制相似问题