我編譯在Fedora Core 12 PHP擴展,但是當我把它發送給某人使用CentOS的,他們得到了錯誤:「ELF文件OS ABI無效」如何在Linux上進行編譯以與所有發行版共享?
我不知道是什麼原因導致運行文件提供以下信息: ELF 64位LSB的共享對象,AMD X86-64,版本1(GNU/Linux的),而不是汽提
加載精細提供了從文件中的以下一個分機: ELF 64位LSB的共享對象, AMD x86-64,版本1(SYSV),沒有剝離
所以看來我需要爲某些發行版產生一個SYSV類型文件,而不是GNU/LINUX文件,但不知道如何。任何指針?
也應該靜態鏈接?
哇,非常感謝對於所有的信息,我能夠編譯brandelf並更改操作系統標題。我發送了修改後的二進制文件,希望它能夠運行。我會試着找到一種擺脫STT_GNU_IFUNC符號的方式,不確定我會怎麼做;似乎不是一件簡單的事情。 – 2010-05-05 12:29:32
您可以嘗試搜索'attribute((ifunc))'的源代碼''。我可以將OSABI從'ELFOSABI_LINUX'上更改爲'prog.C(具有ifunc屬性的C++程序)的* static * Linux/ia32二進制文件從'ELFOSABI_LINUX'更改爲'ELFOSABI_SYSV',並且仍然執行它,沒有任何明顯的副作用。這個二進制文件是靜態鏈接的,它*可以*解釋缺乏副作用。 - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40528 – jschmier 2010-05-05 16:39:49