【问题标题】:Python C extensions on MINIXMINIX 上的 Python C 扩展
【发布时间】:2013-03-02 21:08:40
【问题描述】:

我正在尝试构建this package I wrote(我知道它正在工作),首先以通常的方式通过distutils

# python2.7 setup.py build
running build
running build_py
running build_ext
building 'uptime._posix' extension
gcc -fno-strict-aliasing -Wno-error -march=i586 -DHAVE_DB_185_H -I/usr/pkg/include -I/usr/include -DNDEBUG -Wno-error -march=i586 -DHAVE_DB_185_H -I/usr/pkg/include -I/usr/include -I/usr/pkg/include/python2.7 -c src/_posix.c -o build/temp.minix-3-i686-2.7/src/_posix.o
ld -L/usr/tmp/work/lang/python27/work/Python-2.7.2 -lcompat_minix -minlib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -L/usr/lib -Wl,-R/usr/lib build/temp.minix-3-   i686-2.7/src/_posix.o -o build/lib.minix-3-i686-2.7/uptime/_posix.so
ld: unrecognized option '-Wl,-R/usr/pkg/lib'
ld: use the --help option for usage information
build failed: uptime._posix (no big deal)

好吧,好吧; distutils 是那些经常在不太流行的平台上中断的模块之一。所以我尝试手动编译扩展部分:

# gcc -fno-strict-aliasing -march=i586 -DNDEBUG -I/usr/pkg/include/python2.7 -fPIC -shared -o _posix.so src/_posix.c

这行得通——也就是说,它产生了_posix.so而没有抱怨——但是,尝试在 Python 中导入生成的模块却没有:

>>> import _posix
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: Service unavailable

Google 认为这与操作系统加载共享库(即 Python 扩展)的能力有关。我去看了,结果发现 MINIX 在last year 之前根本不支持共享库,但现在应该支持了。事实上,/usr/pkg/include/python2.7/pyconfig.h 定义了 HAVE_DLOPENHAVE_DYNAMIC_LOADING,所以很明显。

发生了什么事?

【问题讨论】:

    标签: python minix


    【解决方案1】:

    MINIX 现在确实支持共享库,但是pkgin 提供的二进制 Python 包是静态链接的,这使它们无论如何都无法加载共享库。解决这个问题的唯一方法是自己编译 Python,最好是通过pkgsrc。默认情况下,所有pkgsrc 包都是动态构建的。

    (您仍然需要手动构建扩展。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2021-05-10
      • 2010-11-07
      • 1970-01-01
      • 2011-02-06
      相关资源
      最近更新 更多