2012-02-01 17 views
6

Ho ELDK-3.1 installato in una scatola Ubuntu perfettamente funzionante.ELDK gcc linker error in ld.so.1

In un'altra macchina, in esecuzione OpenSuse 12.1 a 64 bit, ho clonato l'installazione ELDK e, per qualche tempo ha funzionato molto bene.

Ora, quando provo a configurare i miei progetti vedo:

configure: error: C compiler cannot create executables 
See `config.log' for more details 

E il registro mostra:

configure:3411: ppc-linux-gcc conftest.c >&5 
/opt/ELDK-3.1/usr/bin/../lib/gcc-lib/ppc-linux/3.3.3/../../../../ppc-linux/bin/ld: warning: ld.so.1, needed by /opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6, not found (try using -rpath or -rpath-link) 
/opt/ELDK-3.1//usr/../ppc_8xx/lib/libc.so.6: undefined reference to `[email protected]_PRIVATE' 
... 

Il file ld.so.1 si trova nella stessa directory libc.so.6.

s -l /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1 
lrwxrwxrwx 1 root root 11 Jan 31 11:43 /opt/ELDK-3.1//usr/../ppc_8xx/lib/ld.so.1 -> ld-2.3.1.so 

Per quanto posso vedere, sto correttamente definire tutti l'ambiente necessario e cercando di costruire utilizzando esattamente lo stesso sistema di generazione come nella casella di Ubuntu (il progetto è "automaked").

così ho scritto uno script cercando di imitare tutto il mio automaked configure fa:

#!/bin/bash 


if [ ! -f confdefs.c ]; then 
    cat > confdefs.c << EOF 
/* confdefs.h */ 
#define PACKAGE_NAME "xyz" 
#define PACKAGE_TARNAME "xyz" 
#define PACKAGE_VERSION "1.00" 
#define PACKAGE_STRING "xyz 1.00" 
#define PACKAGE_BUGREPORT "<[email protected]>" 
#define PACKAGE_URL "" 
#define PACKAGE "xyz" 
#define VERSION "1.00" 
/* end confdefs.h. */ 

int 
main() 
{ 

; 
return 0; 
} 
EOF 
fi 

ARCH=powerpc 
export CROSS_COMPILE=ppc_8xx 
TOOLCHAIN=ppc-linux- 
TOOLCHAIN_ROOT=/opt/ELDK 
LD=`which ${TOOLCHAIN}ld` 
CC=`which ${TOOLCHAIN}gcc` 
GCC=$CC 
export CFLAGS="-Wall -g -I${TOOLCHAIN_ROOT}/ppc_8xx/usr/include/" 
export CPPFLAGS=$CFLAGS 
# export LDFLAGS="-shared" 

$CC $CFLAGS $LDFLAGS confdefs.c -o confdefs 

questo mi dà esattamente lo stesso errore come configure.

Se annullo la riga export LDFLAGS="-shared", d'altra parte, si costruisce perfettamente !.

> ls -l confdefs 
-rwxr-xr-x 1 myself users 16136 Fev 1 09:52 confdefs 
> file confdefs 
confdefs: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, not stripped 

Qualcuno potrebbe qui per favore mi dia alcun indizio di quello che mi manca in modo che i miei progetti di lavoro con precisione su una scatola e non in altri?

Grazie!

+0

Provare a eseguire automake e autoconf di nuovo sul progetto. A proposito, l'estensione .so significa che è un oggetto condiviso, dovresti avere "-shared" abilitato per usare correttamente quegli oggetti condivisi. –

+1

Hai lo stesso errore che ho io, passando a Fedora 16 x86_64. Finora abbiamo trovato una soluzione aggiungendo il seguente link simbolico "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" a eldk-3.1/usr/ppc-linux/lib Sospetto che qualcosa sia cambiato con l'ambiente tra F15 e F16. Lo stesso per OpenSUSE (11-> 12). –

+0

Ehi Sergey, per favore posta una risposta, così posso sceglierlo. La tua soluzione ha funzionato per me. Ha senso dal momento che gli script di linker puntano a qualcosa come "SEARCH_DIR ("/usr/ppc-linux/lib ")', ma non riesco ancora a capire perché funzioni su una distribuzione e non su un'altra. Suppongo si tratti di differenze nei loro pacchetti di sviluppo (autotools o qualcosa di simile). Grazie! – j4x

risposta

6

Non sono sicuro al 100% che risolva tutti i problemi, ma funziona per noi.

Abbiamo scoperto che il collegamento simbolico "ld.so.1 -> ../../../ppc_8xx/lib/ld.so.1" a eldk-3.1/usr/ppc-linux/lib risolve l'errore di collegamento .

Sospetto che qualcosa sia cambiato con l'ambiente tra F15 e F16. Lo stesso per OpenSUSE (11-> 12). È stato inoltrato un bug anche a Fedora https://bugzilla.redhat.com/show_bug.cgi?id=754695 che è stato chiuso come modifiche ABI intenzionali.

+1

questo è stato molto utile per me, grazie. Funziona anche per la versione precedente di ELDK. – Nikko