Der Einfachheit halber habe ich die entsprechenden Seiten unten hinzugefügt.
Mein (falsches) Verständnis zuerst: Wenn ich Optionen mit trennen ,
muss, bedeutet dies, dass die zweite -Wl
Option keine andere Option ist, da sie vorher kommt, ,
was bedeutet, dass sie ein Argument für die -rpath
Option ist.
Ich verstehe nicht, wie -rpath
man ein -Wl,.
Argument haben kann!
Was für mich Sinn machen würde, wäre Folgendes:
-Wl,-rpath .
Dies sollte die Linker-Option -rpath mit dem aktuellen Verzeichnisargument aufrufen.
Mann gcc:
-Wl, Option
Option als Option an den Linker übergeben. Wenn die Option Kommas enthält, wird sie an den Kommas in mehrere Optionen aufgeteilt. Mit dieser Syntax können Sie der Option ein Argument übergeben. Zum Beispiel
-Wl,-Map,output.map
geht-Map output.map
an den Linker. Wenn Sie den GNU-Linker verwenden, können Sie den gleichen Effekt auch mit `-Wl, -Map = output.map 'erzielen.
Mann ld:
-rpath = dir
Fügen Sie dem Suchpfad der Laufzeitbibliothek ein Verzeichnis hinzu. Dies wird verwendet, wenn eine ausführbare ELF-Datei mit gemeinsam genutzten Objekten verknüpft wird. Alle -rpath-Argumente werden verkettet und an den Laufzeitlinker übergeben, der sie zur Laufzeit verwendet, um gemeinsam genutzte Objekte zu finden. Die Option -rpath wird auch verwendet, wenn gemeinsam genutzte Objekte gesucht werden, die von gemeinsam genutzten Objekten benötigt werden, die explizit in der Verknüpfung enthalten sind.
Antworten:
Die
-Wl,xxx
Option für gcc übergibt eine durch Kommas getrennte Liste von Token als durch Leerzeichen getrennte Liste von Argumenten an den Linker . Sowird schließlich ein Linker-Aufruf
In Ihrem Fall möchten Sie "
ld -rpath .
" sagen , also übergeben Sie dies an gcc als.-Wl,-rpath,.
Alternativ können Sie Wiederholungsinstanzen von Folgendem angeben-Wl
:Beachten Sie, dass zwischen
aaa
und dem zweiten kein Komma steht-Wl
.Oder in Ihrem Fall
-Wl,-rpath -Wl,.
.quelle
-Wl,-rpath,.
oder Sie sagen-Wl,-rpath -Wl,.
. Genau eines der beiden kann man nichts auslassen.-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
?-Wl,-rpath,dir1,-rpath,dir2
oder-Wl,-rpath=dir1,-rpath=dir2
.Du könntest auch schreiben
Um diesen lästigen Raum loszuwerden. Es ist wohl besser lesbar als das Hinzufügen zusätzlicher Kommas (genau das wird an ld übergeben).
quelle
-Wl,option
: " Wenn Sie den GNU-Linker verwenden , können Sie den gleichen Effekt auch mit -Wl, -Map = output.map erzielen." Für mich scheint dies darauf hinzudeuten, dass die=
Syntax möglicherweise nicht unterstützt wird , wenn Sie einen anderen Linker als den GNU-Linker verwenden .Eine andere Sache. Sie können die Option -L angeben müssen auch - zB
oder Sie können mit einem Fehler wie enden
quelle
Die Manpage macht es ziemlich klar. Wenn Sie zwei Argumente (
-rpath
und.
) an den Linker übergeben möchten, können Sie schreibenoder alternativ
Die Argumente, die
-Wl,-rpath .
Sie vorgeschlagen haben, sind für mich NICHT sinnvoll. Woher soll gcc wissen, dass Ihr zweites Argument (.
) an den Linker übergeben werden soll, anstatt normal interpretiert zu werden? Der einzige Weg, dies zu wissen, wäre, wenn es Insiderwissen über alle möglichen Linker-Argumente hätte, so dass es wüsste, dass-rpath
ein Argument danach erforderlich ist.quelle