Frage

Ich habe versucht, ein Programm zu kompilieren einen externen kompilierte Objekt coreset.o verwenden. Ich schrieb die public01.c Testdatei und meine Funktionen sind in computation.c, von denen beide kompiliert. Doch auf den Nichtanfordern sie zusammen zu verbinden. Was könnte das Problem sein?

gcc -o public01.x public01.o computation.o coreset.o
ld: fatal: file coreset.o: wrong ELF class: ELFCLASS64
ld: fatal: File processing errors. No output written to public01.x
collect2: ld returned 1 exit status
War es hilfreich?

Lösung

Ich denke, dass coreset.o für 64-Bit kompiliert wurde, und Sie verknüpfen es mit einem 32-Bit-computation.o.

Sie können versuchen, computation.c neu kompiliert mit der ‚-m64‘ Flagge von gcc (1)

Andere Tipps

Sie können '-m32' oder '-m64' geben Sie den Übersetzungsmodus zu wählen.

Wenn Sie mit autoconf (configure) Skripte zu tun, ich in der Regel eingestellt CC = "gcc -m64" (oder CC = "gcc -m32") in der Umgebung, so dass alles, was mit dem richtigen Stippen kompiliert wird. Zumindest in der Regel finden ... Menschen unendlich viele Möglichkeiten zu machen, dass nicht ganz funktioniert, aber meine Trefferquote ist sehr hoch (weit über 95%) mit.

Es stellt sich die Compiler-Version heraus, dass ich nicht mit der kompilierten Version mit dem coreset.o getan überein.

Einer wurde 32bit das andere war 64bit. Ich werde dies für den Fall, jemand überlassen sonst läuft in ein ähnliches Problem.

Es sieht aus wie die Objektdatei auf einem 64-Bit-Toolchain kompiliert wurde, und Sie sind mit einem 32-Bit-Toolchain. Haben Sie versucht, die Objektdatei in 32-Bit-Modus neu zu kompilieren?

sudo apt-get install ia32-libs 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top