Como vincular usando o GCC sem caminho -l nem codificar para uma biblioteca que não segue a convenção de nomenclatura libNAME.so?
-
03-07-2019 - |
Pergunta
Eu tenho uma biblioteca compartilhada que deseja vincular um executável contra o uso de GCC. A biblioteca compartilhada tem um nome fora do padrão não da forma libNAME.so, então eu não pode usar a opção -l habitual. (Ele passa a ser também uma extensão de Python, e por isso não tem 'lib' prefixo.)
Eu sou capaz de passar no caminho para o arquivo de biblioteca diretamente para a linha de comando link, mas isso faz com que o caminho da biblioteca para ser codificado no executável.
Por exemplo:
g++ -o build/bin/myapp build/bin/_mylib.so
Existe uma maneira de vincular a esta biblioteca sem causar o caminho a ser codificado no executável?
Solução
Há o ":" prefixo que lhe permite dar nomes diferentes para as suas bibliotecas. Se você usar
g++ -o build/bin/myapp -l:_mylib.so other_source_files
deve procurar o seu caminho para o _mylib.so.
Outras dicas
Se você pode copiar a biblioteca compartilhada para o diretório de trabalho quando g ++ é invocado então isso deve funcionar:
g++ -o build/bin/myapp _mylib.so other_source_files
Se você estiver em Unix ou Linux Eu acho que você pode criar um link simbólico para a biblioteca no diretório que você quer a biblioteca.
Por exemplo:
ln -s build/bin/_mylib.so build/bin/lib_mylib.so
Você poderia, então, usar -l_mylib
http://en.wikipedia.org/wiki/Symbolic_link