Pergunta

Estou criando um aplicativo de plug -in (Dylib) que depende de várias outras bibliotecas. Essas outras bibliotecas estão instaladas no meu sistema, mas não são garantidas para serem instaladas no sistema de qualquer usuário. Então, preciso encontrar uma maneira de agrupar as dependências junto com meu aplicativo.

Eu descobri que posso usar otool Para listar ou alterar os caminhos para outros Dylibs. Isso permitiria criar uma pasta que agrupa meu aplicativo de plug -in e todas as dependências necessárias.

No entanto, fazer isso manualmente parece uma tarefa demorada e idiota. Existem utilitários disponíveis para automatizá -lo?

Ou talvez eu esteja fazendo errado e há uma abordagem melhor e mais óbvia para esse problema?

EditarEu criei um roteiro Isso automatiza a maioria da tarefa.

Foi útil?

Solução

Use caminhos relativos no seu dylib usando o install_name_tool. Dessa forma, você pode defini -los uma vez e instalar esse diretório em qualquer lugar sem precisar modificar suas bibliotecas no horário de instalação.

Você deve colocar todas as suas dependências do Dylib em uma pasta e, em seguida, use o install_name_tool para definir a localização relativa dos outros Dylibs dos quais você depende. Suponha que sua biblioteca libmyfoo.dylib dependa de libbar.dylib:

install_name_tool -change "/Whatever/full/path/libbar.dylib" "@loader_path/libbar.dylib" libmyfoo.dylib

Dessa forma, sua biblioteca sempre procurará libbar.dylib no mesmo diretório em que libmyfoo.dylib está localizado.

Você também pode precisar executar o install_name_tool em alguns dos outros Dylibs, se eles dependem um do outro.

Cuidado, a documentação para install_name_tool ressalta que "para que essa ferramenta funcione quando os nomes ou raths de instalação são maiores, o binário deve ser construído com a opção LD (1) -Headerpad_Max_install_Names.". -headerpad_max_install_names Opção de linha de comando ao criar sua biblioteca.

@loader_path é relativo ao binário usado para carregar o dylib, neste caso o seu libmyfoo.dylib. Usar @executable_path Se você deseja encontrar as bibliotecas em relação ao executável, que iniciou a sequência de carregamento da biblioteca.

Outras dicas

Para completar a resposta de Christopher, aqui estão alguns links para recursos úteis:

MacDyLibbundler é uma pequena ferramenta útil que faz exatamente o que é solicitado. Certamente salvou minha vida ao distribuir binários para o OSX.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top