Wie verwende ich benutzerdefinierten Assembler für Clang?

Lesezeit: 3 Minuten

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?

  • 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, ob armv7l-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


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 scheint bin (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


1379090cookie-checkWie verwende ich benutzerdefinierten Assembler für Clang?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy