2013-01-18 19 views
7

immer folgende Fehler mit dem Befehl g++ -o test -L . -l pqg ++ werfen Datei nicht erkannt: Dateiformat nicht erkannt Fehler

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 

gcc Version 4.1.2 20.070.115 (SUSE Linux)

ich die gleichen Fehler, wenn ich Versuchen Sie -l dbodbc anstelle von -l pq zu verwenden.

Beachten Sie, dass test.c ein einfaches Hallo Weltprogramm ist.

Vielen Dank im Voraus.

+0

Ich wette, Sie versuchen, dies mit einer 32-Bit-Version von G ++ zu kompilieren. –

+0

welches g ++ zeigt "/ usr/bin/g ++" und Datei auf/usr/bin/g ++ zeigt "/ usr/bin/g ++: ELF 64-Bit LSB ausführbare Datei, x86-64, Version 1 (SYSV), für GNU/Linux 2.6.4, dynamisch verlinkt (benutzt gemeinsame libs), entfernt ". Also ich denke, das macht es klar, dass g ++ ist 64 Bit – user1991251

+0

Rufen Sie nicht Ihr Programm 'test' es ist der Name einer eingebauten Shell. Und was sagen die Befehle 'file',' nm -D' und 'objdump -x' über dein' libpq.so'? –

Antwort

6

file /usr/bin/g++ sagen Ihnen, dass g++ selbst ein 64-Bit-Programm ist, das heißt es auf einem 64-Bit-Rechner läuft, ist es nicht Ihnen sagen, dass g ++ kann 64-Bit-Code kompilieren (es sehr unwahrscheinlich ist, aber Es könnte ein Cross-Compiler für einen völlig anderen Prozessor sein!) Verwenden Sie g++ -v oder g++ -dumpmachine, um herauszufinden, für welches Ziel es ausführbare Dateien generiert.

G ++ eigentlich nicht, dass die Bibliothek verwenden, es geht nur die -l Option an den Linker, so dass der Fehler von dem Linker kommt, ld

Wenn ld und objdump beide sagen sie das nicht erkennen können Bibliothek, aber die gleiche Datei ist in Ordnung auf einem anderen Computer, würde ich versuchen, das binutils-Paket zu aktualisieren oder neu zu installieren, die beide ld und objdump bietet.

Sie haben möglicherweise eine 32-Bit binutils installiert, so dass die ld und objdump die x86_64-Bibliothek nicht verstehen. Stellen Sie sicher, dass die 64-Bit-RPM (d. H. X86_64) binutils installiert ist.