当前位置:  开发笔记 > 编程语言 > 正文

如何在linux上编译以与所有发行版共享?

如何解决《如何在linux上编译以与所有发行版共享?》经验,为你挑选了1个好方法。

我在Fedora Core 12上编译了一个PHP扩展,但当我将它发送给使用CentOS的人时,他们得到错误:"ELF文件操作系统ABI无效"

我不确定是什么原因导致此运行文件提供以下信息:ELF 64位LSB共享对象,AMD x86-64,版本1(GNU/Linux),未剥离

加载正常的扩展提供以下文件:ELF 64位LSB共享对象,AMD x86-64,版本1(SYSV),未剥离

因此,似乎我需要为某些发行版生成SYSV类型文件,而不是GNU/LINUX文件,不知道如何.有什么指针吗?

我也应该静态链接吗?



1> jschmier..:

声明:"ELF文件OS ABI无效",意味着应用程序二进制接口在所使用的二进制文件之间不兼容(即一个尝试混合主机和目标二进制文件,这可能无法按预期工作).ELF头的e_ident[EI_OSABI]字节包含操作系统/ ABI标识.你的Fedora系统,将其设置为(),而你的朋友的CentOS系统是将其设置为(或).ELFOSABI_LINUX3ELFOSABI_SYSVELFOSABI_NONE0

可以编译FreeBSD brandelf实用程序(brandelf.c)并使用它将OSABI设置为ELFOSABI_SYSV(brandelf -f 0 brandelf -t SVR4 .

我不知道在编译/链接时指定此值的任何gcc标志.我相信你的Fedora系统上gcc使用的binutils版本负责将OSABI设置为Linux.这是我的理解是连接器只指定ABI如果一个 STT_GNU_IFUNC符号在输出文件中结束了(见ifunc.txt在http://groups.google.com/group/generic-abi的细节STT_GNU_IFUNC).


所述readelf(1)命令可用于检索和显示(存储在ELF头的ABI信息readelf -h ).


这个类似的问题也可能是有意义的.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有