Referência: Símbolo fraco
No link é mencionada a seguinte opção de vinculador:
cc main.o -L`pwd` -Wl,-R`pwd` -lpowerslow -o main2
O propósito de todas as sinalizações acima foi documentado no Manual do GCC, exceto -R
.
O que esse sinalizador instrui o vinculador?
AIT
Vinod
Para o GCC, esta é apenas uma opção, não duas:
A
-Wl,<something>
construção é usada para passar a<something>
parte como opção(ões) para o vinculador (ld
). Neste caso, ele dizgcc
para invocarld
como:E se você olhar
man ld
no Linux, você encontrará (ênfase minha):E a
-rpath
opção é:Portanto, toda a construção significa "dizer ao vinculador de tempo de execução para pesquisar objetos compartilhados para vinculação no diretório de trabalho atual".
A
ld
página do manual também observa:Portanto, o objetivo geral para esta construção de opção, por exemplo
é garantir que o
main
binário resultante pesquisarálibpowerslow.so
apenas no diretório de trabalho atual, de modo que ele escolherá a versão exata compilada pelo terceiro comando, e não qualquer outra versãolibpowerslow.so
que possa existir em outro lugar no sistema.Você deve perceber que, embora "assar" o diretório de trabalho atual seja útil com binários de exemplo de curta duração, como o criado aqui, você deve especificar outra coisa como o caminho de pesquisa da biblioteca de tempo de execução ao criar algo a ser instalado para uso em todo o sistema.
Da
ld
página do manualIsso significa que o executável adicionará o diretório atual à lista de locais onde o vinculador de tempo de execução procurará por bibliotecas compartilhadas, o que o ajudará a localizar a
powerslow
biblioteca.Seria menos confuso de usar
-rpath
do que-R
.