Scusate se questa è una domanda ovvia, ma ho trovato sorprendentemente pochi riferimenti sul web ...compatibilità binaria tra le distribuzioni Linux
Sto lavorando con un API scritto in C da uno dei nostri partner commerciali e fornito come file .so binary, costruito su Fedora 11. Abbiamo testato l'API su una macchina di sviluppo Fedora 11 senza problemi. Tuttavia, quando provo a collegarmi all'API sulla piattaforma di destinazione del nostro cliente, che si trova su SuSE Enterprise 10.2, ottengo un errore "Formato file non riconosciuto".
I comandi che fanno anche parte del pacchetto binutils, come objdump o nm, mi danno lo stesso errore di formato del file.
ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
e le "LDD" comando spettacoli:: Il "file" di comando mi mostra
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]
Sto indovinando questo è dovuto alla incompatibilità tra le librerie C sulle due piattaforme, con la il problema è che il codice è stato compilato con una nuova versione di glibc ecc. rispetto a quella disponibile su SuSE 10.2. Sto postando questa domanda nella remota possibilità che ci sia un modo per compilare il codice sulla piattaforma Fedora 11 del nostro partner in modo tale che possa essere eseguito anche su SuSE 10.2.
sulla stessa architettura? (i386! = amd64) – elmarco
Avrei dovuto dire che la piattaforma di build e la piattaforma SuSE 10.2 di destinazione sono entrambe x86_64. –
Ispeziona il formato del file con objdump o semplicemente eseguendo il .so (sì, questo è possibile). Sarà ELF, perché è usato sin dall'età della pietra. Se hai una versione di libc incompatibile, riceverai un messaggio di errore che dice esattamente questo - quindi probabilmente la tua ipotesi è sbagliata e il problema è probabilmente qualcosa di diverso. – hirschhornsalz