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 ,
qui signifie que c'est un argument à la -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.
homme 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
passe
-Map output.map
à l'éditeur de liens. Lorsque
à l'aide de l'éditeur de liens GNU, vous pouvez également obtenir
le même effet avec
`-Wl,-Map=sortie.la carte".
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;
- N'est-ce pas le titre manquant de caractère de point à la fin?
Vous devez vous connecter pour publier un commentaire.
La
-Wl,xxx
option pour gcc passe une liste séparée par des virgules des jetons comme un espace séparé de la liste d'arguments à la de l'éditeur de liens. Doncdevient finalement un linker appel
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-Wl
:Noter qu'il n'y a pas de virgule entre
aaa
et la deuxième-Wl
.Ou, dans votre cas,
-Wl,-rpath -Wl,.
.-Wl,-rpath,.
ou vous dites-Wl,-rpath -Wl,.
. Précisément de l'un des deux, vous ne pouvez pas omettre quoi que ce soit.-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
?-Wl,-rpath,dir1,-rpath,dir2
, ou-Wl,-rpath=dir1,-rpath=dir2
.Vous pouvez également écrire
Débarrasser de ces satanés l'espace. C'est sans doute plus lisible que l'ajout de virgules (c'est exactement ce qui se passa à ld).
-Wl,option
: "Lors de l'utilisation de l'éditeur de liens GNU, vous pouvez également obtenir le même effet avec -Wl,-Map=sortie.map". Pour moi, cela semble indiquer que si vous utilisez un éditeur de liens autres que l'éditeur de liens GNU, le=
syntaxe ne peut être pris en charge.Une autre chose. Vous pouvez avoir besoin de spécifier l'option-L ainsi - eg
ou vous pouvez vous retrouver avec une erreur comme
La page de man rend assez clair. Si vous voulez passer deux arguments (
-rpath
et.
) à l'éditeur de liens, vous pouvez écrireou sinon
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 possible de l'éditeur de liens arguments donc il savait que-rpath
requis un argument d'après elle.