Por conveniência, adicionei as páginas de manual relevantes abaixo.
Meu (mal) entendimento primeiro: se eu precisar separar opções ,
, isso significa que a segunda -Wl
não é outra opção, porque ela vem antes, o ,
que significa que é um argumento para a -rpath
opção.
Eu não entendo como -rpath
pode ter uma -Wl,.
discussão!
O que faria sentido em minha mente seria o seguinte:
-Wl,-rpath .
Isso deve chamar a opção -rpath linker com o argumento do diretório atual.
man gcc:
-Wl, opção
Passe a opção como uma opção para o vinculador. Se a opção contiver vírgulas, ela será dividida em várias opções. Você pode usar esta sintaxe para passar um argumento para a opção Por exemplo,
-Wl,-Map,output.map
passa-Map output.map
para o vinculador. Ao usar o vinculador GNU, você também pode obter o mesmo efeito com `-Wl, -Map = output.map '.
man ld:
-rpath = dir
Inclua um diretório no caminho de pesquisa da biblioteca de tempo de execução. Isso é usado ao vincular um executável ELF a objetos compartilhados. Todos os argumentos -rpath são concatenados e transmitidos ao vinculador de tempo de execução, que os utiliza para localizar objetos compartilhados no tempo de execução. A opção -rpath também é usada ao localizar objetos compartilhados, necessários aos objetos compartilhados explicitamente incluídos no link;
Respostas:
A
-Wl,xxx
opção para gcc passa uma lista de tokens separados por vírgula como uma lista de argumentos separados por espaço para o vinculador . assimeventualmente se torna uma chamada de vinculador
No seu caso, você quer dizer "
ld -rpath .
", para passar isso para o gcc como-Wl,-rpath,.
alternativa. Você pode especificar instâncias repetidas de-Wl
:Observe que não há vírgula entre
aaa
e o segundo-Wl
.Ou, no seu caso
-Wl,-rpath -Wl,.
,.fonte
-Wl,-rpath,.
ou você diz-Wl,-rpath -Wl,.
. Precisamente um dos dois, você não pode omitir nada.-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
?-Wl,-rpath,dir1,-rpath,dir2
, ou-Wl,-rpath=dir1,-rpath=dir2
.Você também pode escrever
Para se livrar desse espaço traquina. É sem dúvida mais legível do que adicionar vírgulas extras (é exatamente o que é passado para o ld).
fonte
-Wl,option
: " Ao usar o vinculador GNU , você também pode obter o mesmo efeito com -Wl, -Map = output.map." Para mim, isso parece indicar que, se você usar um vinculador que não seja o GNU, a=
sintaxe poderá não ser suportada.Mais uma coisa Pode ser necessário especificar a opção -L bem - por exemplo,
ou você pode acabar com um erro como
fonte
A página de manual deixa bem claro. Se você deseja passar dois argumentos (
-rpath
e.
) para o vinculador, pode escreverou alternativamente
Os argumentos que
-Wl,-rpath .
você sugeriu NÃO fazem sentido para mim. Como o gcc deve saber que seu segundo argumento (.
) deve ser passado para o vinculador em vez de ser interpretado normalmente? A única maneira de saber isso é se tivesse conhecimento interno de todos os argumentos possíveis do vinculador, para que soubesse que era-rpath
necessário um argumento depois dele.fonte