2

Mac OS X 10.6 以降で実行されている python ソフトウェアで使用するために、Mac OS 10.6.5 を実行している 64 ビット Mac で、 Mozilla NSS ライブラリの python インターフェイスであるpython-nssを構築しようとしています。特定のオプションを使用して NSS 自体を正常にビルドできますが、python-nss ビルドでいくつかの警告が表示され、結果の Python モジュールは使用できません。

NSS をビルドするには、これらの手順に従いますが、cvs からのチェックアウトではなく、このNSS ソース コードを使用します。を実行するmake nss_build_allと、次のエラーが発生します。

ncraike@ncraikework ~/Installs/nss-3.12.9/mozilla/security/nss
$ make nss_build_all
...
drbg.c: In function ‘RNG_RandomUpdate’:
drbg.c:516: error: size of array ‘arg’ is negative
make[3]: *** [Darwin10.5.0_DBG.OBJ/Darwin_SINGLE_SHLIB/drbg.o] Error 1
make[2]: *** [libs] Error 2
make[1]: *** [libs] Error 2
make: *** [libs] Error 2

問題の行 ( の 516 行目mozilla/security/nss/lib/freebl/drbg.c) は、特定の型が予想されるサイズであるというアサーションです。

    PR_STATIC_ASSERT(sizeof(size_t) <= 4);

簡単なテスト プログラムを作成すると、sizeof(size_t) は 8 のように見えるため、上記の手順ページにあるにもかかわらず、おそらく 64 ビット バージョンがビルドされています。

Alpha/OSF1 を除く Unix プラットフォームでは、システムの 64 ビット ABI 用のビルドが必要な場合は、環境で USE_64=1 を設定します。デフォルトでは、NSS は、Alpha/OSF1 を除くすべてのプラットフォームで 32 ビット環境用にビルドされます。

gcc オプション(同様-arch i386の問題で推奨) を追加しても解決しませんが、USE_64 環境変数を使用したビルドは成功します (ただし、64 ビット ビルドは私が必要としているものではないかもしれません)。

ncraike@ncraikework ~/Installs/nss-3.12.9/mozilla/security/nss
$ USE_64=1 make nss_build_all

これで問題ないかもしれませんが、(このソースを使用して) python-nss をビルドしようとすると問題が発生します。

setup.pyビルドしたばかりの NSS ライブラリを含めるには、python-nss にいくつかの変更を加える必要があります。元setup.pyの例では、拡張機能ごとにインクルード ディレクトリがハードコードされています。たとえば、次のようになります。

nss_nss_extension = \
    Extension('nss.nss',
              sources            = ['src/py_nss.c'],
              include_dirs       = ['src', '/usr/include/nss3', '/usr/include/nspr4'],
              libraries          = ['nspr4', 'ssl3', 'nss3'],
              extra_compile_args = extra_compile_args,
              )

したがって、次の行を追加して拡張宣言を変更しました。

DIST_ROOT = '/Users/ncraike/Installs/nss-3.12.9/mozilla/dist/'
INCLUDE_DIRS = [DIST_ROOT+'Darwin10.5.0_64_DBG.OBJ/include', DIST_ROOT+'public/nss/', DIST_ROOT+'private/nss/']
LIB_DIRS = [DIST_ROOT+'Darwin10.5.0_64_DBG.OBJ/lib/']

...そして、各拡張子を変更して INCLUDE_DIRS リストを追加し、library_dirs引数を含めます ( distutils のドキュメントで説明されています)。例えば:

nss_nss_extension = \
    Extension('nss.nss',
              sources            = ['src/py_nss.c'],
              include_dirs       = ['src'] + INCLUDE_DIRS,
              libraries          = ['nspr4', 'ssl3', 'nss3'],
              library_dirs       = LIB_DIRS,
              extra_compile_args = extra_compile_args,
              )

これらの変更後、python setup.py buildは実行され、NSS ライブラリを認識しているように見えますが、次のようないくつかの警告が生成されます。

src/py_nss.c:12640: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘Py_ssize_t’
gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -arch i386 -arch ppc -arch x86_64 build/temp.macosx-10.6-universal-2.6/src/py_nss.o -L/Users/ncraike/Installs/nss-3.12.9/mozilla/dist/Darwin10.5.0_64_DBG.OBJ/lib/ -lnspr4 -lssl3 -lnss3 -o build/lib.macosx-10.6-universal-2.6/nss/nss.so
ld: warning: in build/temp.macosx-10.6-universal-2.6/src/py_nss.o, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/ncraike/Installs/nss-3.12.9/mozilla/dist/Darwin10.5.0_64_DBG.OBJ/lib//libnspr4.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/ncraike/Installs/nss-3.12.9/mozilla/dist/Darwin10.5.0_64_DBG.OBJ/lib//libssl3.dylib, file was built for unsupported file format which is not the architecture being linked (i386)

「ファイルは、リンクされているアーキテクチャではない、サポートされていないファイル形式でビルドされました」は、最も一般的な警告です。このエラーは別のサイトの投稿で-arch i386言及されており、gcc でオプションを使用することで解決できる可能性があります。ビルド プロセスのどの段階でこのオプションを追加するのか (NSS か python-nss か?)、それを python distutils ビルド スクリプトに追加する方法がわかりません。

ビルドは完了しますが、結果の python モジュールは使用できないようです:

ncraike@ncraikework ~/Installs/python-nss-0.10/build/lib.macosx-10.6-universal-2.6
$ ls
nss
ncraike@ncraikework ~/Installs/python-nss-0.10/build/lib.macosx-10.6-universal-2.6
$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import nss.nss
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(nss/nss.so, 2): Library not loaded: @executable_path/libssl3.dylib
  Referenced from: /Users/ncraike/Installs/python-nss-0.10/build/lib.macosx-10.6-universal-2.6/nss/nss.so
  Reason: image not found

NSS の構築方法または python-nss の構築方法に誤りがありますか? Mac OS X NSS ライブラリと正しくリンクするには、python-nss ビルド スクリプトにどのように指示すればよいですか? 私は C の経験よりも Python の経験の方がはるかに多いので、簡単なビルド エラーが発生しても驚かないでしょう。

Xcode 3.2.4 (64 ビット) がインストールされた Mac OS 10.6.5 を実行しています。とgcc -vを与えます。gcc version 4.2.1 (Apple Inc. build 5664)Target: i686-apple-darwin10

ありがとう。

4

1 に答える 1

0

OSX 10.7には、デフォルトでllvm-gccとllvm-g++があります。彼らは通常、より多くの口頭のエラーメッセージを印刷します。

cc -o Darwin11.3.0_DBG.OBJ/Darwin_SINGLE_SHLIB/drbg.o -c -g -fPIC -Di386 -Wmost -fpascal-strings -fno-common -pipe -DDARWIN -DHAVE_STRERROR -DHAVE_BSD_FLOCK  -DXP_UNIX -DSHLIB_SUFFIX=\"dylib\" -DSHLIB_PREFIX=\"lib\" -DSHLIB_VERSION=\"3\" -DSOFTOKEN_SHLIB_VERSION=\"3\" -DRIJNDAEL_INCLUDE_TABLES -DDEBUG -UNDEBUG -DDEBUG_antkong -DUSE_UTIL_DIRECTLY -DMP_API_COMPATIBLE -I../../../../dist/Darwin11.3.0_DBG.OBJ/include -I../../../../dist/public/nss -I../../../../dist/private/nss -Impi -Iecl  drbg.c
drbg.c:471:34: warning: implicit conversion from enumeration type 'PRStatus' to different enumeration type 'SECStatus' (aka 'enum _SECStatus') [-Wconversion]
    return (globalrng != NULL) ? PR_SUCCESS : PR_FAILURE;
                               ~ ^~~~~~~~~~
drbg.c:471:47: warning: implicit conversion from enumeration type 'PRStatus' to different enumeration type 'SECStatus' (aka 'enum _SECStatus') [-Wconversion]
    return (globalrng != NULL) ? PR_SUCCESS : PR_FAILURE;
                               ~              ^~~~~~~~~~
drbg.c:516:5: error: 'arg' declared as an array with a negative size
    PR_STATIC_ASSERT(sizeof(size_t) <= 4);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../../dist/Darwin11.3.0_DBG.OBJ/include/prtypes.h:528:42: note: expanded from macro 'PR_STATIC_ASSERT'
    extern void pr_static_assert(int arg[(condition) ? 1 : -1])
                                         ^~~~~~~~~~~~~~~~~~~~
2 warnings and 1 error generated.

うまくいけば、彼らはあなたが解決策を見つけたり、MozillaNSSプロジェクトにバグレポートを提出したりするのに役立つかもしれません

于 2012-03-20T17:40:41.380 に答える