Nach stundenlangem googeln entscheide ich mich, aufzugeben und euch Experten zu fragen. Ich versuche, eine 32-Bit-Anwendung (xgap, wenn jemand interessiert) in meinem 64 Ubuntu 11.10 zu erstellen. Ich habe die CFLAGS = -m32 und die LDFLAGS = -L / usr / lib32 in das Makefile eingefügt . Die Objekte sind in 32 Bit fein eingebaut. Der letzte Schritt ist das Verknüpfen aller Objekte und Bibliotheken für X-Fenster mit dieser ausführbaren Datei --- xgap. Irgendwie gibt es mir immer wieder diesen Fehler:
gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o popdial.o xgap.o selfile.o -L/usr/lib32 -lXaw -lXmu -lXt -lXext -lX11 -lSM -lICE
/usr/bin/ld: skipping incompatible /usr/lib32/libXmu.so when searching for -lXmu
...
/usr/bin/ld: i386 architecture of input file `xcmds.o' is incompatible with i386:x86-64 output
...
Ich habe die Unterstützung für ia32-libs und mutilib installiert . Ich denke, ich muss nur den Linker zwingen, eine i386-Ausgabe zu generieren. Ich habe versucht, zwei ld- Flags in meinen gcc-Befehl einzufügen, wie oben gezeigt: -melf_i386 und -oformat elf32-i386 . Was aber passiert ist, dass gcc nicht mehr nach der 32-Bit-Bibliothek in / usr / lib32 sucht . Ich frage mich, ob ich diese Flags in eine feste Reihenfolge bringen muss.
Vielen Dank für jede Idee und Hilfe!
BEARBEITEN: Wenn ich in meinem letzten gcc-Befehl das -m32-Flag hinzufüge (die Verknüpfungsstufe, glaube ich), sucht gcc nicht mehr in / usr / lib32 (wirklich), selbst wenn ich das -L / usr / lib32-Flag an der richtigen Stelle habe seltsam ...) und erzeugt den folgenden Fehler:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libXaw.so when searching for -lXaw
/usr/bin/ld: skipping incompatible /usr/lib/libXaw.so when searching for -lXaw
/usr/bin/ld: cannot find -lXaw
collect2: ld returned 1 exit status
Hat jemand eine Idee, warum das passiert? Ich benutze das Auto-Tool, um zu konfigurieren und zu machen. Ich bin wirklich gut darin, diese Skriptdateien zu modifizieren.
EIDT : Ich habe das Problem gelöst. Ich glaube, dass gcc ein statisches Bibliotheksarchiv erwartet hat. Ich habe das Skript getlibs von http://ubuntuforums.org/showthread.php?t=474790 verwendet , um alle zum Verknüpfen erforderlichen .a-Archive herunterzuladen. Dann hat gcc funktioniert. Ich denke, dass gcc im Verzeichnis / usr / lib32 gesucht hat , aber die .a- Archive nicht gefunden hat, und deshalb im Standardverzeichnis / usr / lib gesucht hat , wo es die inkompatiblen * .so- Dateien findet.
Aber dann ist die Frage: Die * .so- Dateien in / usr / lib32 / aus dem Paket ia32-libs haben nicht wirklich die Bibliotheken, die zum Verknüpfen benötigt werden? Wofür werden diese Dateien in / usr / lib32 / verwendet?