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)?

Foi útil?

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.

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