Como faço para satisfazer um 3-parte compartilhada de referência da biblioteca de status quando eu estou criando um calço biblioteca compartilhada em vez de um arquivo executável?
Pergunta
Eu sou o novo mantenedor de um sistema de Python em casa que usa um conjunto de 3-parte compartilhada bibliotecas C através de um calço biblioteca compartilhada que é criado usando uma combinação de gole e um script setup.py. Isso tem funcionado bem até recentemente.
The 3rd-party bibliotecas compartilhadas C foram atualizados para a nova funcionalidade e agora eu recebo o seguinte erro de tempo de execução, após uma compilação limpa, quando tento executar o nosso principal programa Python (que as importações do compartilhada calço biblioteca gerado):
SH-3.00 $ python ams.py
ImportError: /usr/lib/libz4lnx.so: undefined symbol: stat
Eu encontrei uma linha de discussão, de 1999, que explica que o problema é que estatísticas não está presente em libc.so.6, mas sim em libc_nonshared.a, e fornece uma solução: Fazer a ligação com a biblioteca C, adicionando lc para sua linha de comando de compilação.
http://www.redhat.com/archives/pam-list/1999-February/msg00082.html
Eu adicionei 'c' para a lista de bibliotecas no script setup.py, mas isso não muda os meus resultados. Eu suspeito que isso é porque eu estou criando um calço biblioteca compartilhada em vez de um executável.
Como posso satisfazer o 3-parte compartilhada de referência da biblioteca para stat, dado o meu ambiente de compilação?
O meu sistema de compilação é:
SH-3.00 $ lsb_release -a
LSB Version: :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: CentOS
Description: CentOS release 4.6 (Final)
Release: 4.6
Codename: Final
Minha versão gcc é:
SH-3.00 $ gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-10)
Versão My Python é:
SH-3.00 $ python -V
Python 2.3.4
Solução 2
Como se vê, enquanto se move para Centos 5.3 foi provavelmente uma coisa boa, a longo prazo, o problema real acaba por ter sido a maneira que libz4lnx foi construída sobre o DVD que eu estava originalmente usando. No processo de mudança para Centos 5.3, eu também mudou-se para uma compilação mais recente da biblioteca libz4lnx. Hoje, ao testar outra coisa, eu usei a biblioteca do DVD original e tem exatamente o mesmo erro de símbolo indefinido ao executar o programa Python. de volta para o mais novo DVD Switching (cerca de dois meses mais recente) resolveu o problema novamente.
Outras dicas
A solução foi criar um novo Centos 5.3 VM e re-construir e / ou re-instalar os componentes conforme necessário.