3

私は自分が書いたこのパッケージ(私は動作していることがわかっています)を最初に通常の方法でビルドしようとしていました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は、あまり人気のないプラットフォームで頻繁に機能するモジュールの1つです。そこで、拡張部分を手動でコンパイルしてみました。

# 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拡張機能)をロードするOSの機能に関連していることを示唆しています。調べてみると、MINIXは昨年まで共有ライブラリをまったくサポートしていなかったことがわかりましたが、今はサポートする必要があります。実際、との両方を/usr/pkg/include/python2.7/pyconfig.h定義しているので、明らかにそうです。HAVE_DLOPENHAVE_DYNAMIC_LOADING

どうしたの?

4

1 に答える 1

4

MINIXは現在共有ライブラリをサポートしていますが、によって提供されるバイナリPythonパッケージpkginは静的にリンクされているため、共有ライブラリをロードできません。これを回避する唯一の方法は、Pythonを自分でコンパイルすることです。理想的にはpkgsrc。すべてのpkgsrcパッケージは、デフォルトで動的にビルドされます。

(拡張機能も手動で作成する必要があります。)

于 2013-03-02T21:08:40.313 に答える