Gibt es einen Unterschied zwischen der Syntax „-Wl, Option“ und „-Xlinker Option“ für GCC?

Lesezeit: 2 Minuten

Benutzeravatar von bpw1621
bpw1621

Ich habe einige Konfigurationsdateien durchgesehen und gesehen, dass beide verwendet werden (wenn auch auf unterschiedlichen Architekturen). Wenn Sie GCC auf einer Linux-Box verwenden, gibt es einen Unterschied zwischen den beiden Syntaxen zum Übergeben von Optionen an den Linker?

Beim Lesen des GCC-Handbuchs werden sie, soweit ich das beurteilen konnte, fast identisch erklärt.

Benutzeravatar von Kerrek SB
Kerrek SB

Aus man gcc:

-Xlinker-Option

Option als Option an den Linker übergeben. Sie können dies verwenden, um systemspezifische Linker-Optionen bereitzustellen, die GCC nicht erkennen kann.

Wenn Sie eine Option übergeben möchten, die ein separates Argument akzeptiert, müssen Sie -Xlinker zweimal verwenden, einmal für die Option und einmal für das Argument. Um beispielsweise -assert-Definitionen zu übergeben, müssen Sie -Xlinker -assert -Xlinker-Definitionen schreiben. Es funktioniert nicht, -Xlinker “-assert definitions” zu schreiben, da dies die gesamte Zeichenfolge als einzelnes Argument übergibt, was der Linker nicht erwartet.

Wenn Sie den GNU-Linker verwenden, ist es normalerweise bequemer, Argumente mit der Syntax Option=Wert an Linker-Optionen zu übergeben, als als separate Argumente. Sie können beispielsweise -Xlinker -Map=output.map anstelle von -Xlinker -Map -Xlinker output.map angeben. Andere Linker unterstützen diese Syntax möglicherweise nicht für Befehlszeilenoptionen.

-Wl,Option

Option als Option an den Linker übergeben. Wenn die Option Kommas enthält, wird sie an den Kommas in mehrere Optionen aufgeteilt. Sie können diese Syntax verwenden, um ein Argument an die Option zu übergeben.

Beispielsweise übergibt -Wl,-Map,output.map -Map output.map an den Linker. Bei Verwendung des GNU-Linkers können Sie denselben Effekt auch mit -Wl,-Map=output.map erzielen.

Wie Sie sehen können, besteht der einzige Unterschied darin -Wl ermöglicht es Ihnen, mehrere Argumente durch ein Komma anzugeben, wie z -Wl,-rpath,/my/libswomit du nichts anfangen kannst -Xlinker; auf der anderen Seite, -Xlinker ist vielleicht etwas selbsterklärender. Treffen Sie Ihre Wahl. Überprüfen Sie auch andere Compiler (nvcc fällt mir ein und clang), um zu sehen, ob einer von ihnen der Syntax zustimmt, und verwenden Sie diese dann für die Portabilität, wenn dies für Sie wichtig ist.

  • Sie können das gleiche Verhalten, wie im Handbuch erwähnt, von mehreren -Xlinker-Optionen erhalten. Ich hatte die Handbuchseite gelesen und glaubte, dass es keinen Unterschied gab. Was ich mich gefragt habe, war, ob es außer persönlichen Vorlieben einen anderen Grund gibt, warum Sie beide im Code in freier Wildbahn sehen würden (z. B. Portabilität oder das eine gegen das andere usw.).

    – bpw1621

    28. August 2011 um 13:42 Uhr

  • Nun, wie gesagt, andere Compiler unterstützen möglicherweise auch eine der Optionen, aber nicht die andere. Zum Beispiel, nvcc akzeptiert nur -Xlinker. Aber das ist keine reine “gcc”-Frage mehr 🙂

    – Kerrek SB

    28. August 2011 um 14:11 Uhr

1396720cookie-checkGibt es einen Unterschied zwischen der Syntax „-Wl, Option“ und „-Xlinker Option“ für GCC?

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

Privacy policy