很抱歉,如果这是一个明显的问题,但我在网上找到了令人惊讶的一些参考...二进制兼容性
我与我们的业务合作伙伴用C语言编写的API时并以Fedora 11为基础构建的.so二进制文件提供给我们。我们已经在Fedora 11开发机器上测试了API,没有任何问题。但是,当我尝试与客户的目标平台(恰好是SuSE Enterprise 10.2)上的API进行链接时,出现“文件格式未识别”错误。
命令那也是binutils的包的一部分,如objdump的或纳米,给我相同的文件格式错误。 “文件”命令显示了我:
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上运行。
在同一架构上? (i386!= amd64) – elmarco 2009-11-20 16:27:13
我应该提到构建平台和目标SuSE 10.2平台都是x86_64。 – 2009-11-20 16:45:01
您可以使用objdump或通过简单地执行.so来检查文件格式(是的,这是可能的)。这将是ELF,因为它是从石器时代开始使用的。如果你有不兼容的libc版本,你会得到一个错误信息,说明这一点 - 所以你的猜测很可能是错误的,这个问题可能是不同的。 – hirschhornsalz 2009-11-20 19:41:34