python-config ldflags no mac
Pergunta
Eu tenho um problema com python-config --ldflags
no OS X 10.6.2.
Usando minha instalação python.org python que não é do sistema:
robin-mbp:~ robince$ which python
/Library/Frameworks/Python.framework/Versions/2.5/bin/python
robin-mbp:~ robince$ python-config --ldflags
-L/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config -ldl -lpython2.5
Mas se eu construir um programa C incorporando Python com os LDFLAGS acima, isso resultará na incorporação do python do sistema.Parece que -lpython2.5 está selecionando o python do sistema primeiro, antes daquele no caminho -L.
Até agora, a única maneira de fazê-lo funcionar é com
LDFLAGS=-F/ -framework Python
mas quando se trata de distribuição eu realmente gostaria de poder usar o python-config.
O que está acontecendo com o caminho de pesquisa da biblioteca que o impede de funcionar conforme o esperado?De acordo com a página de manual -L, os caminhos devem ser pesquisados antes do caminho padrão.
Existe alguma opção semelhante a 'esquecer o caminho de pesquisa padrão e pesquisar apenas os caminhos especificados com -L' que eu poderia adicionar à saída do python-config para fazê-lo funcionar?
Ou existe alguma maneira de extrair os sinalizadores de estrutura de trabalho de qualquer Python que esteja no caminho (que funcionaria para qualquer coisa que o usuário esteja usando, ou seja, sistema, python.org, macports ou próprio construído)?
Solução
Desculpe responder minha própria pergunta, mas recebi uma resposta incrivelmente rápida na lista de discussão pythonmac-sig, onde também perguntei.É um bug do python atual: http://bugs.python.org/issue7541
Solução alternativa sugerida:
A solução alternativa mais fácil é abrir uma janela do terminal e executar os seguintes comandos:
cd /library/frameworks/python.framework/versions/2.5/lib/python2.5/config ln -s libpython2.5.a libpython2.5.dylib
Isso garantirá que o ligante OSX saiba que a Libpython é uma biblioteca compartilhada e links para esta biblioteca.Por padrão, o linker OSX procura um .dylib em todo o caminho do vinculador e só então procura arquivos .a.
EDITAR:Atualização adicional:
Se você pode adicionar sinalizadores específicos para Mac no seu sistema de construção, você pode adicionar
-Wl,-search_paths_first
Para LDFlags no OSX, isso garante que o ligante procure os arquivos .dylib e .a em um diretório no caminho do link antes de passar para o próximo diretório.