2017-11-22 4 views
3

Ich versuche, spotifyd für meine aarch64-Architektur zu kompilieren, cargo build --release --target aarch64-unknown-linux-gnu verwendend, sind alle Abhängigkeiten installiert und so weit Kompilierung funktioniert.spotifyd, Kreuzkompilierung für arm64

jedoch der letzte Schritt (Compiling spotifyd v0.1.1 (file:///home/ubuntu/spotifyd)) scheitert mit:

= note: aarch64-linux-gnu-ld.gold: -Wl,--as-needed: unknown option 
      aarch64-linux-gnu-ld.gold: use the --help option for usage information 

für Fracht Meine Konfiguration ist Setup den aarch64 Linker zu verwenden:

/root/.cargo/config 

[target.aarch64-unknown-linux-gnu] 
linker = "aarch64-linux-gnu-ld.gold" 

Es scheint, dass -Wl nicht verfügbar ist aarch64-linux-gnu-ld.gold innerhalb Gibt es Alternativen zu aarch64-linux-gnu-ld.gold, die ich verwenden könnte oder ist es möglich, die -Wl Flagge aus Fracht zu entfernen?

Vielen Dank für Ihre Empfehlung.

+0

' amd64' oder 'arm64' jetzt?Auch das Übergeben von '-Wl, xyz' an den Linker scheint mir merkwürdig, da dieses Flag normalerweise" weiter xyz zum Linker "bedeutet ... – Siguza

+0

arm64, -wl scheint automatisch von der Fracht überholt zu werden ... –

Antwort

0

Der Linker akzeptiert nicht "-Wl" als Option, es ist ein Befehlszeilenparameter für den GCC Compiler Treiber.

Gcc verwendet diese Option, um Befehlszeilenparameter an den Linker zu übergeben, die der Treiber gcc aufrufen wird, wenn er .o (Objekt-) Dateien einspeist.

Siehe gcc Docs 3.14 Options for Linking

-Wl, Option

Pass Option als Option für den Linker. Wenn die Option Kommas enthält, wird sie an den Kommas in mehrere Optionen aufgeteilt.

jeden dieser Erklärungen anzeigen (nur nach unten überspringen):

Das Gentoo Wiki "Project: Quality Assurance/As-needed" im Abschnitt "Fehler in der Kompilierung, nicht erkennen Option".

Beachten Sie die Version des verwendeten Binutils Gold Linkers, siehe Bug 18859 als Beispiel. Überprüfen Sie immer Bug Reports, aber ein Fehler ist nicht das Problem.

Um Ihre letzte Frage direkt zu beantworten "Kann ich -WL aus der Fracht entfernen", können Sie ja, aber es ist die falsche Sache zu tun; Dieser Befehl entfernt nicht verwendeten Code.

Mit dieser Option kann der Linker einige der auf seiner Befehlszeile bereitgestellten Bibliotheken ignorieren, d. H. Nicht verknüpfen, wenn sie nicht tatsächlich von der gemeinsam genutzten Bibliothek verwendet werden, die gerade erstellt wird.

Was Sie tun möchten, ist der Linker zu aarch64-linux-gnu-gcc ändern und Verknüpfung sollte funktionieren. Siehe martinhaths Frage zu Reddit "Cross-compiling and linker flags".

Also, was Sie wollen, ist dies:

/root/.cargo/config

[target.aarch64-unknown-linux-gnu]

Linker = „aarch64-linux- gnu- gcc "

+0

Wow! Vielen Dank für Ihre Arbeit und das Graben hier! Das werde ich natürlich versuchen! –

+0

Kein Problem. Wenn Sie möchten, können Sie die .configure-Dateien durchsuchen, um herauszufinden, wo der Linker erkannt wird und warum er den Linker lieber direkt als den Compiler-Treiber aufrufen möchte - normalerweise werden erweiterte Erkennungsroutinen verwendet, um bestimmte Funktionen bestimmter Linker zu erkennen getan, dass nachfolgende Skripte angepasst werden sollten, um mit der Methode übereinzustimmen. Es ist ein Fehler in der Konfiguration, aber nicht einer, der Ihrem Computer oder Programm Schaden zufügen würde (sobald das Skript bearbeitet wurde). Einen Fehlerbericht an der E-Mail-Adresse oder auf der Website in den Google Docs einzureichen ist der richtige Weg. – Rob

+0

Ich kämpfe jetzt mit einem anderen Problem (libasound), aber Ihre Antwort ist die richtige für diese Frage. Vielen Dank! –

Verwandte Themen