317 votes

Je ne comprends pas -Wl, -rpath -Wl,

Pour des raisons de commodité, j'ai ajouté pertinentes pages de manuel ci-dessous.

Mon (mes)d'abord comprendre: Si j'ai besoin de séparer les options avec ,, cela signifie que le deuxième -Wl n'est pas une autre option, car il s'agit avant , ce qui signifie qu'il s'agit d'un argument à l' -rpath option.

Je ne comprends pas comment -rpath peut avoir un -Wl,. argument!

Ce qui ferait sens dans mon esprit serait celui-ci:

-Wl,-rpath .

Cela devrait invoquer -rpath option de l'éditeur de liens avec le répertoire en cours argument.


l'homme de gcc:

-Wl,option

L'option de la carte en option pour la l'éditeur de liens. Si l'option contient des virgules, il est divisée en plusieurs options à la des virgules. Vous pouvez utiliser cette syntaxe pour passer un argument à l'option. Pour exemple, -Wl,-Map,output.map' passes -Carte de sortie.carte " pour l'éditeur de liens. Lorsque u> chanter l'éditeur de liens GNU, vous pouvez également obtenir le même effet avec `-Wl,-Map=sortie.la carte".

l'homme ld:

-rpath=dir

Ajouter un répertoire à l' la bibliothèque d'exécution de chemin de recherche. C'est utilisé lors de la liaison d'un exécutable ELF avec des objets partagés. Tous -rpath les arguments sont concaténés et passé pour l'exécution de l'éditeur de liens, qui les utilise pour localiser les objets partagés au moment de l'exécution. L'-rpath option est également utilisé lors de la localiser les objets partagés qui sont nécessaire par le partage des objets explicitement inclus dans le lien;

372voto

Kerrek SB Points 194696

L' -Wl,xxx option de gcc passe une liste séparée par des virgules des jetons comme un espace-liste séparée par des arguments de l' éditeur de liens. Donc

gcc -Wl,aaa,bbb,ccc

devient finalement un appel de l'éditeur de liens

ld aaa bbb ccc

Dans votre cas, vous voulez dire "ld -rpath .", de sorte que vous passer de ce gcc en tant que -Wl,-rpath,. Alternativement, vous pouvez spécifier répétez les instances de l' -Wl:

gcc -Wl,aaa, -Wl,bbb -Wl,ccc

Ou, dans votre cas, -Wl,-rpath -Wl,..

76voto

Mike Points 181

Vous pouvez aussi écrire

 -Wl,-rpath=.
 

Pour se débarrasser de cet espace embêtant. C'est sans doute plus lisible que d'ajouter des virgules (c'est exactement ce qui est passé à ld).

45voto

vince Points 131

Une autre chose. Vous devrez peut - être spécifier l'option -L ainsi - par exemple

 -Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz
 

ou vous pouvez vous retrouver avec une erreur comme

 ld: cannot find -lbaz
 

13voto

David Grayson Points 22459

La page de man rend assez clair. Si vous voulez passer deux arguments (-rpath et .) à l'éditeur de liens, vous pouvez écrire

-Wl,-rpath,.

ou sinon

-Wl,-rpath -Wl,.

Les arguments -Wl,-rpath . vous suggère de ne PAS faire de sens à mon avis. Comment est gcc censé savoir que votre deuxième argument (.) est censé être transmis à l'éditeur de liens au lieu d'être interprété normalement? La seule façon d'être en mesure de savoir s'il avait connaissance d'initié, de tous les possibles de l'éditeur de liens arguments donc il savait qu' -rpath requis un argument d'après elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X