抱歉,如果这是一个明显的问题,但我在网上发现的参考资料令人惊讶地少......
我正在使用由我们的一位业务合作伙伴用 C 编写的 API,并以 .so 二进制文件的形式提供给我们,该文件基于 Fedora 11 构建。我们一直在 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 上运行。