我正在尝试构建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_DLOPEN
和HAVE_DYNAMIC_LOADING
,所以它显然也是如此。
发生了什么事?
答案 0 :(得分:4)
MINIX现在支持共享库,但pkgin
提供的二进制Python包是静态链接的,这使得它们无论如何都无法加载共享库。解决这个问题的唯一方法是自己编译Python,最好是通过pkgsrc
编译。默认情况下,所有pkgsrc
包都是动态构建的。
(您还需要手动构建扩展程序。)