Ich arbeite seit einiger Zeit an einem C ++ - Projekt, möchte es aber auf meinen Armprozessor portieren. Ich habe bereits alle meine Cross-Compile-Tools (ich verwende CodeSourcery) und dachte, ich könnte nur mein Makefile ändern, um auf diesen Compiler zu zeigen. Es kompiliert gut mit dem Standard g ++, aber wenn Sie eine make auf den Cross-Compiler zeigen, bekomme ich Verschiebungsfehler:
/ home / oryan / CodeSourcery / bin / .. / lib / gcc / arm-nicht-linux-gnueabi / 4.5.2 /../../../../ arm-none-linux-gnueabi / bin / ld: ServerSocket.o: Umzüge in generische ELF (EM: 3)
ServerSocket.o: konnte Symbole nicht lesen: Datei im falschen Format
collect2: ld hat 1 Exitstatus zurückgegeben make: *** [einfacher_server] Fehler 1
Es scheint, als hätte ich keine richtige Verbindung eingerichtet oder es zeigt auf einen falschen Ort. Ich kenne mich mit Makefiles nicht aus und verpasse wahrscheinlich etwas Offensichtliches. Das Makefile, das ich verwendet habe, stammt von Ссылка , wobei die Client-Seite entfernt wurde:
%Vor%Momentan kompiliere ich jede Datei manuell und es funktioniert großartig, aber ich möchte mein Verständnis hier weiter vertiefen.
Danke!
Das Problem besteht darin, dass Sie Ihr Makefile so eingerichtet haben, dass es mit dem neuen g ++ verknüpft ist, aber Sie haben den Compiler, den Sie zum Erstellen der Objekte verwenden, nicht geändert.
Der einfachste Weg, dies zu beheben, besteht darin, die Umgebung CXX
auf den nächsten Compiler, d. h.
oder setzen Sie es einfach für einen gegebenen make
, indem Sie CXX=...
zur Befehlszeile hinzufügen.
Sie müssen zuerst make clean
eingeben, aber Sie verwenden dann den richtigen Compiler für die Kompilierung und die Verknüpfung.
Sie können auch eine neue How-to-compile-C ++ - Dateiregel in Ihrem Makefile angeben, um den neuen Compiler anzugeben, aber die Umgebungsvariable ist einfacher:
%Vor%Das Problem liegt an diesen drei Regeln:
%Vor% Zuerst sollte die linke Seite der Regel die Objektdatei sein, die ich vermute, also sollte das .o
Suffix haben.
Das zweite Problem und wahrscheinlich die Wurzel Ihres Problems ist, dass es keinen Befehl zum Kompilieren der Quelldateien gibt, was bedeutet, dass make
den Standard-Compiler und nicht Ihren Cross-Compiler verwendet.
Tags und Links c++ cross-compiling makefile