2013-01-18 19 views
7

ottenendo seguente errore con il comando g++ -o test -L . -l pqg ++ file di lancio non riconosciuto: Formato di file non riconosciuto errore

libpq.so: file not recognized: File format not recognized 

#file libpq.so 
libpq.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), not stripped 

versione di gcc 4.1.2 20.070.115 (SUSE Linux)

io sono sempre lo stesso errore se io prova a utilizzare -l dbodbc anziché -l pq.

Si noti che test.c è un semplice programma mondiale Hello.

Grazie in anticipo.

+0

Scommetto che stai cercando di compilarlo con una versione di G ++ a 32 bit. –

+0

che g ++ mostra "/ usr/bin/g ++" e il file su/usr/bin/g ++ mostra "/ usr/bin/g ++: eseguibile LSB ELF a 64 bit, x86-64, versione 1 (SYSV), per GNU/Linux 2.6.4, collegato dinamicamente (usa librerie condivise), spogliato ". Quindi penso che questo chiarisca che g ++ è 64 bit – user1991251

+0

Non chiamare il 'test' del programma, è il nome di una shell incorporata. E cosa dicono i comandi 'file',' nm -D' e 'objdump -x' dicono del tuo' libpq.so'? –

risposta

6

file /usr/bin/g++ si dice che g++ per sé è un eseguibile a 64 bit, vale a dire che viene eseguito su un computer a 64 bit, è non lo fa vi dico che g ++ possono compilare codice a 64 bit (è molto improbabile, ma it potrebbe essere un cross-compilatore per un processore completamente diverso!) Utilizzare g++ -v o g++ -dumpmachine per scoprire per quale target genera gli eseguibili.

G ++ in realtà non usa quella libreria, appena passa l'opzione -l al linker, quindi l'errore è in arrivo dal linker, ld

Se ld e objdump sono entrambi dicendo che non possono riconoscere il libreria ma lo stesso file va bene su una macchina diversa, proverei ad aggiornare o reinstallare il pacchetto binutils, che fornisce sia ld e objdump.

È possibile che sia installato un binutils 32 bit, quindi il suo ld e objdump non comprenderebbe la libreria x86_64. Assicurarsi di avere installato l'RPM binutils a 64 bit (cioè x86_64).

Problemi correlati