当我创建共享库填充程序而不是可执行文件时,如何满足对stat的第三方共享库引用?

时间:2009-07-02 01:58:55

标签: python c swig

我是内部Python系统的新维护者,该系统通过使用swig和setup.py脚本组合创建的共享库垫片使用一组第三方共享C库。直到最近,这一直运作良好。

第三方共享C库已针对新功能进行了更新,现在我在干净的构建之后,当我尝试运行我们的主Python程序(导入生成的共享库Shim)时,得到以下运行时错误:

-sh-3.00 $ python ams.py

ImportError: /usr/lib/libz4lnx.so: undefined symbol: stat

我在1999年找到了一个讨论主题,解释了问题是libc.so.6中没有stat,而是libc_nonshared.a中提供了解决方案:通过添加-lc链接c库到你的构建命令行。

http://www.redhat.com/archives/pam-list/1999-February/msg00082.html

我在setup.py脚本中的库列表中添加了'c',但这并没有改变我的结果。我怀疑这是因为我正在创建一个共享库垫片而不是可执行文件。

在给定构建环境的情况下,如何满足第三方共享库对stat的引用?

我的构建系统是:

-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

我的gcc版本是:

-sh-3.00 $ gcc --version

gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-10)

我的Python版本是:

-sh-3.00 $ python -V

Python 2.3.4

2 个答案:

答案 0 :(得分:1)

解决方案是创建一个新的Centos 5.3虚拟机,并根据需要重新构建和/或重新安装组件。

答案 1 :(得分:1)

事实证明,从长远来看,移动到Centos 5.3可能是一件好事,实际问题是libz4lnx在我最初使用的DVD上构建的方式。在迁移到Centos 5.3的过程中,我也转向了libz4lnx库的新版本。今天,在测试其他内容时,我使用了原始DVD中的库,并在运行Python程序时得到了完全相同的未定义符号错误。切换回最新的DVD(再过两个月)再次解决了这个问题。