Ich habe clang kompiliert, um es als Cross-Compiler für ARM zu verwenden (indem ich es mit ./configure --target=armv7l-unknown-linux-gnueabihf
), aber wenn ich versuche, einen beliebigen C-Code zu kompilieren, versucht er zu verwenden /usr/bin/as
. Ich habe bereits binutils für ARM kompiliert und sie befinden sich in einem separaten Verzeichnis. Wie weise ich clang (oder llvm) an, den von mir angegebenen Assembler zu verwenden?
Wie verwende ich benutzerdefinierten Assembler für Clang?
Versuchen Sie, die Option –host an configure zu übergeben, was dazu führt, dass alle cc ar etc-Dienstprogramme mit armv7l-unknown-linux-gnueabihf- vorangestellt werden, z. B.:
./configure --host=armv7l-unknown-linux-gnueabihf --build=i686-unknown-linux-gnu
Da Sie configure mit hoffentlich Autotools verwenden, werfen Sie einen Blick auf:
automake Kreuzkompilierung
-
Ich glaube du hast die Frage falsch verstanden. @JosephH fragt, wie man Programme mit Clang kompiliert, aber Ihre Antwort bezieht sich auf “wie man Clang selbst kompiliert”.
– Arunprasad Rajkumar
27. August 2014 um 11:13 Uhr
Ich hatte immer Probleme beim Konfigurieren aus dem Quellverzeichnis mit ./configure und habe am Ende aufgegeben. Heutzutage konfiguriere ich immer aus einem separaten Verzeichnis, dh ..//configure, obwohl mir gesagt wurde, dass es empfohlen wird, einen absoluten Pfad für configure zu verwenden.
Ihre ARM-Binutils sollten in demselben Präfix installiert werden, das Sie für Clang verwenden, und sicherstellen, dass sie sich im Pfad befinden, wenn Sie Clang konfigurieren und erstellen – dh PATH=/some/prefix/bin:$PATH; /configure –target=armv7l-unknown-linux-gnueabihf. Wenn Sie sie zu Verpackungszwecken in separaten Verzeichnissen aufbewahren, sollte make install DESTDIR= helfen.
Ich erstelle Clang im Allgemeinen nicht, aber die Buildscripts, die ich für devkitARM verwende, könnten hilfreich sein – http://sourceforge.net/p/devkitpro/buildscripts/ci/c372699fc7b4de90eb044314ce5bed04db640291/tree/
-
Entschuldigung, aber ich habe Clang noch nie im selben Verzeichnis wie das Quellverzeichnis konfiguriert. Der Befehl, den ich in meine Frage aufgenommen habe, hat das weggelassen
--prefix
Flagge der Kürze halber. Wie Sie aus CarlNorums Kommentaren ersehen können, habe ich seine Aufnahme von bemerkt--prefix
Flagge, und es hat immer noch nicht für mich funktioniert. Das Seltsame ist, dass der Kompilierungsprozess tatsächlich die integrierte Assembler-Binärdatei in der zu erstellen scheintbin
(mit dem korrekten Ziel-Triple-Ordner), wird jedoch nie verwendet. Ich werde mir auf jeden Fall das Build-Skript ansehen, das Sie in Ihre Antwort aufgenommen haben.– JosefH
2. Januar 2013 um 9:24 Uhr
Ich weiß, dass ich das kürzlich gemacht habe – lassen Sie mich sehen, ob ich Konfigurationsdateien habe. Für ARM sollte es nicht den Maschinencodegenerator verwenden, anstatt zu versuchen, trotzdem einen Assembler auszuführen? Hast du versucht zu überholen
--integrated-as
? Können Sie ein Beispiel für eine Befehlszeile und eine Ausgabe von using zeigen-v
?– Karl Norum
27. Dezember 2012 um 22:57 Uhr
Meine Konfigurationszeile, obwohl sie nicht nach viel Hilfe aussieht:
../llvm/configure --target=mipsel-sde-elf --prefix=/some/prefix --enable-optimized
. Das hat gut funktioniert und lief/some/prefix/mipsel-sde-elf-as
. Allerdings verwende ich normalerweise den integrierten Assembler, also habe ich es schon eine Weile nicht mehr getestet.– Karl Norum
27. Dezember 2012 um 23:04 Uhr
@CarlNorum Ich habe auch den integrierten Assembler (
armv7l-unknown-linux-gnueabihf-llvm-as
) im selben Ordner wie clang, wird aber immer noch verwendet/usr/bin/as
. Ich bin mir nicht sicher, obarmv7l-unknown-linux-gnueabihf-llvm-as
intern anruft/usr/bin/as
obwohl.– JosefH
27. Dezember 2012 um 23:19 Uhr
Verwendung der
-v
Flag in Ihrem Aufruf sollte Ihnen jedes Tool anzeigen, das mit vollständigen Befehlszeilen ausgeführt wird.– Karl Norum
27. Dezember 2012 um 23:33 Uhr
@CarlNorum
-v
Flag zeigt nur den Aufruf von/usr/bin/as
.– JosefH
27. Dezember 2012 um 23:34 Uhr