Lo siento si esto es una pregunta obvia, pero he encontrado sorprendentemente pocas referencias en la web ...compatibilidad binaria entre las distribuciones de Linux
Estoy trabajando con una API escrita en C por uno de nuestros socios de negocios y se nos suministró como un archivo binario .so, basado en Fedora 11. Hemos estado probando la API en una máquina de desarrollo Fedora 11 sin problemas. Sin embargo, cuando intento vincularme con la API en la plataforma de destino de nuestro cliente, que es SuSE Enterprise 10.2, aparece el error "No se reconoce el formato del archivo".
comandos que son también parte del paquete binutils, tales como objdump o nm, me da el mismo error de formato de archivo.
ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
y los "LDD" espectáculos de comando:: El "archivo" de comandos me muestra
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]
supongo esto es debido a la incompatibilidad entre las bibliotecas de C en las dos plataformas, con el El problema es que el código se compiló con una nueva versión de glibc, etc. que la disponible en SuSE 10.2. Estoy publicando esta pregunta sobre la posibilidad de que haya una forma de compilar el código en la plataforma Fedora 11 de nuestro socio de tal manera que también se ejecute en SuSE 10.2.
en la misma arquitectura? (i386! = amd64) – elmarco
Debería haber mencionado que la plataforma de compilación y la plataforma SuSE 10.2 de destino son ambas x86_64. –
Inspecciona el formato de archivo con objdump o simplemente ejecutando el .so (sí, esto es posible). Será ELF, porque se usa desde la edad de piedra. Si tiene una versión incompatible de libc, recibirá un mensaje de error que dice exactamente eso, por lo que su conjetura probablemente sea incorrecta y el problema probablemente sea diferente. – hirschhornsalz