Pour plus de commodité, j'ai ajouté les pages de manuel pertinentes ci-dessous.
Ma (mauvaise) compréhension en premier: si j'ai besoin de séparer les options avec ,
, cela signifie que la seconde -Wl
n'est pas une autre option car elle vient avant, ,
ce qui signifie qu'elle est un argument en faveur de l' -rpath
option.
Je ne comprends pas comment -rpath
peut avoir un -Wl,.
argument!
Ce qui aurait du sens dans mon esprit serait le suivant:
-Wl,-rpath .
Cela devrait invoquer l'option -rpath linker avec l'argument de répertoire courant.
homme gcc:
-Wl, option
Passez l'option comme option à l'éditeur de liens. Si l'option contient des virgules, elle est divisée en plusieurs options au niveau des virgules. Vous pouvez utiliser cette syntaxe pour passer un argument à l'option. Par exemple,
-Wl,-Map,output.map
passe-Map output.map
à l'éditeur de liens. Lorsque vous utilisez l'éditeur de liens GNU, vous pouvez également obtenir le même effet avec `-Wl, -Map = output.map '.
homme ld:
-rpath = dir
Ajoutez un répertoire au chemin de recherche de la bibliothèque d'exécution. Ceci est utilisé lors de la liaison d'un exécutable ELF avec des objets partagés. Tous les arguments -rpath sont concaténés et transmis à l'éditeur de liens d'exécution, qui les utilise pour localiser les objets partagés lors de l'exécution. L'option -rpath est également utilisée lors de la localisation d'objets partagés qui sont nécessaires à des objets partagés explicitement inclus dans le lien;
Réponses:
L'
-Wl,xxx
option pour gcc transmet une liste d'arguments séparés par des virgules comme une liste d'arguments séparés par des espaces à l' éditeur de liens . Alorsdevient finalement un appel de l'éditeur de liens
Dans votre cas, vous voulez dire "
ld -rpath .
", donc vous passez ceci à gcc comme-Wl,-rpath,.
Alternativement, vous pouvez spécifier des instances répétées de-Wl
:Notez qu'il n'y a pas de virgule entre
aaa
et la seconde-Wl
.Ou, dans votre cas
-Wl,-rpath -Wl,.
,.la source
-Wl,-rpath,.
ou vous dites-Wl,-rpath -Wl,.
. Précisément l'un des deux, vous ne pouvez rien omettre.-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
?-Wl,-rpath,dir1,-rpath,dir2
, ou-Wl,-rpath=dir1,-rpath=dir2
.Vous pouvez également écrire
Pour se débarrasser de cet espace embêtant. C'est sans doute plus lisible que l'ajout de virgules supplémentaires (c'est exactement ce qui est transmis à ld).
la source
-Wl,option
: " Lorsque vous utilisez l'éditeur de liens GNU , vous pouvez également obtenir le même effet avec -Wl, -Map = output.map." Pour moi, cela semble indiquer que si vous utilisez un éditeur de liens autre que l'éditeur de liens GNU, la=
syntaxe peut ne pas être prise en charge.Une autre chose. Vous devrez peut - être spécifier l'option -L ainsi - par exemple
ou vous pouvez vous retrouver avec une erreur comme
la source
La page de manuel le montre assez clairement. Si vous voulez passer deux arguments (
-rpath
et.
) à l'éditeur de liens, vous pouvez écrireOu bien
Les arguments que
-Wl,-rpath .
vous avez suggérés n'ont pas de sens pour moi. Comment gcc est-il censé savoir que votre deuxième argument (.
) est censé être passé à l'éditeur de liens au lieu d'être interprété normalement? La seule façon dont il serait en mesure de le savoir est d'avoir une connaissance privilégiée de tous les arguments de l'éditeur de liens possibles, de sorte qu'il savait que cela-rpath
nécessitait un argument après lui.la source