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.
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/libs
womit 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.