很抱歉,如果這是一個明顯的問題,但我在網上找到了令人驚訝的一些參考...二進制兼容性
我與我們的業務合作伙伴用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