40media How do I compile on linux to share with all distributions?
صفحه اصلي

How do I compile on linux to share with all distributions?



I compiled a PHP extension on Fedora Core 12, but when I send it to someone using CentOS they get the error: "ELF file OS ABI invalid"

I'm not sure what causes this running file provides the following info: ELF 64-bit LSB shared object, AMD x86-64, version 1 (GNU/Linux), not stripped

An extension that loads fine provides the following from file: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped

So it seems I need to generate a SYSV type file for some distributions, instead of a GNU/LINUX file, no idea how though. Any pointers?

Also should I be statically linking?


Microbenchmark showing process-switching faster than thread-switching; what's wrong?

1:

C++ build systems [closed]
The statement: "ELF file OS ABI invalid", means this the Application Binary Interface is non compatible between binaries used (i.e. API to translate group name to group id (gid)one is endeavor to mix host and tarreceive binaries, which may not job as expected). What scripts should not be ported from bash to python? The e_ident[EI_OSABI] byte of the ELF header contains the operating system/ABI identification. Vim + OmniCppComplete: Completing on Class Members which are STL containers Your Fedora system is setting this to ELFOSABI_LINUX (3) while your friend's CentOS system is setting it to ELFOSABI_SYSV (ELFOSABI_NONE or 0).. How do I bring a processes window to the foreground on X Windows? (C++) You may be able to compile the FreeBSD brandelf utility (brandelf.c) and use it to set the OSABI to ELFOSABI_SYSV (brandelf -f 0 <file> or brandelf -t SVR4 <file>.. How communicate with pty via minicom or screen? I am not aware of any gcc flags for specifying this value at compile/link time. Script to parse emails for attachments I believe this the version of binutils used by gcc on your Fedora system is responsible for setting the OSABI to Linux. It is my understanding this the linker only specifies the ABI if a STT_GNU_IFUNC symbol ends up in the output file (see ifunc.txt at http://groups.google.com/group/generic-abi for details on STT_GNU_IFUNC).. The readelf(1) command must be used to retrieve and display the ABI information stored in the ELF header (readelf -h <file>).. This similar question may also be of interest..

2:

Compiled object files don't usually transfer well between different linux distrialthough ions. Different Distrialthough ions often have different policies regarding libraries, where they're stored, how they're loaded. . There's so many differences between them (yes, even in Fedora & RedHat/CentOS). They're likely to supply their own patches to componenets at every level (kernel, PHP, library location). If they're using the distrialthough ion PHP package, the distrialthough ion might have patched it better intergrate into their system.. The major issue you'll likely run into is this the distrialthough ion have used a different libraries/compiler settings. Check to see what verision gcc is on his computer and compare it to what's on yours. (Fedora 12 has quite a few newer libraries than CentOS). That's where your issue might be. . Ananother possible issue is this your binary is fine, although its incompatible with all the libraries it uses. I'm not sure if there's a good way to receive around this one without compiling on the tarreceive -distrialthough ion (or a varient). You must see what libraries each shared object/executable uses by using the lld <file> command.. Also, was there any output before the error ELF file OS ABI invalid? Most places I see it being referenced there's more information than that..

3:

It's most likely this your friend is not running a 64-bit system. ELF is the standard format for Linux executables, although 32-bit systems can't run 64-bit executables.. Get the output for uname -a from your friend. If the output doesn't contain "x86_64", then he's on a 32-bit version of CentOS.. If so, you either need to set up a cross-compiling environment, or a virtual machine for compiling 32-bit binaries on, or just provide your friend with the sources so this he must compile it himself..


76 out of 100 based on 71 user ratings 186 reviews