Qual é a diferença entre -rpath e -L?

91

gcce ldfornecem muitas maneiras de especificar um caminho de pesquisa para bibliotecas - entre elas os sinalizadores -rpathe -L. As páginas de manual não revelam diferenças entre esses dois sinalizadores, efetivamente dizendo que cada sinalizador adiciona uma biblioteca ao caminho de pesquisa da biblioteca. No entanto, parece estranho que ambas as bandeiras façam exatamente a mesma coisa. Quais são as diferenças, se houver, entre essas duas opções?

Craig M. Brandenburg
fonte
2
Talvez você esteja pensando -rpath-link?
ams

Respostas:

107

Você deve estar lendo algumas cópias desatualizadas das páginas de manual (ênfase adicionada):

-rpath = dir
      Adiciona um diretório ao 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 passados ​​para o vinculador de tempo de execução , que os
      usa para localizar objetos compartilhados em tempo de execução.

vs.

-L searchdir
--library-path = searchdir
      Adiciona o caminho searchdir à lista de caminhos que ld pesquisará por
      bibliotecas de arquivo e scripts de controle ld.

Portanto, -Linforma ldonde procurar bibliotecas para vincular ao vincular. Você usa isso (por exemplo) quando está construindo com base em bibliotecas em sua árvore de construção, que serão colocadas nos caminhos de biblioteca normais do sistema por make install. --rpath, por outro lado, armazena esse caminho dentro do executável, para que o vinculador dinâmico de tempo de execução possa localizar as bibliotecas. Você usa isso quando suas bibliotecas estão fora do caminho de pesquisa da biblioteca do sistema.

Derobert
fonte
18
Notas: 1. Na maioria das vezes, quando se precisa -rpath=/some/weird/path, -L /some/weird/pathtambém se precisa . 2. Com gccum precisa de uso -Wl,-rpath=dir.
n. 'pronomes' m.
5
Ainda não entendo por que ambos são necessários. Eu tenho a mesma experiência do nm acima. Que informações são necessárias da biblioteca no momento da construção? Além de possíveis arquivos h, de causa. Mas isso é outra coisa que eu acho ...
Fredrik Johansson
1
@FredrikJohansson Esse seria um assunto razoável para uma nova pergunta (presumindo que ainda não tenha sido perguntado, é claro). Os símbolos disponíveis são necessários, pelo menos, mas provavelmente há outras coisas.
derobert de
4
Pergunta de acompanhamento adicionada em: stackoverflow.com/questions/28096133/…
Fredrik Johansson