2011-01-19 7 views
2

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

NSSをビルドするには、these instructionsに従いますが、これを使用するのは、で、cvsのチェックアウトではありません。私はちょうどmake nss_build_allを実行すると、私はエラーが発生します。

質問(ライン mozilla/security/nss/lib/freebl/drbg.cの516)で行が特定の型が期待される大きさであるという主張である

[email protected] ~/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 

PR_STATIC_ASSERT(sizeof(size_t) <= 4); 

Iの場合上記の手順のページにも関わらず、8のようですので、おそらく64ビット版が構築されている簡単なテストプログラム、はsizeof(size_t型)を記述します。

のgccを追加

On Unix platforms, except Alpha/OSF1, if you want a build for the system's 64-bit ABI, set USE_64=1 in your environment. By default, NSS builds for the 32-bit environment on all platforms except Alpha/OSF1.

オプション-arch i386(のために提案は)助けにはならないが、USE_64環境変数を持つ建物は成功している(64ビットのビルドが、私は必要なものではないかもしれないが):

[email protected] ~/Installs/nss-3.12.9/mozilla/security/nss 
$ USE_64=1 make nss_build_all 

これは大丈夫かもしれないが、私がpython-nss(this sourceを使用して)をビルドしようとすると、問題が発生します。

作成したばかりのNSSライブラリを含めるには、python-nssのsetup.pyにいくつかの変更が必要です。

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/'] 

...と、各拡張子を変更:これらの行を追加することにより、

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, 
      ) 

だから私は、変更した拡張宣言:元setup.pyハードコードがインクルードは、例えば、各拡張のためのディレクトリを含めますINCLUDE_DIRSリストを追加し、library_dirs引数を含める(distutils documentationで説明)。

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) 

「ファイルがあり、サポートされていないファイル形式のために建てられたの例アーキテクチャがリンクされていないことが最も一般的な警告です。このエラーはa post on another siteに記載されており、gccで-arch i386オプションを使用する可能性があります。このオプション(NSSまたはpython-nss?)を追加するビルドプロセスのどの段階で、私がpython distutilsビルドスクリプトにどのように追加するかはわかりません。

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

[email protected] ~/Installs/python-nss-0.10/build/lib.macosx-10.6-universal-2.6 
$ ls 
nss 
[email protected] ~/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構築していますか? python-nssビルドスクリプトがMac OS X NSSライブラリと正しくリンクするようにするにはどうすればよいですか?私はCの経験よりもはるかに多くのPythonの経験があるので、私はいくつかの単純な建物のエラーを作った場合、私は驚くことはありません。

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

ありがとうございました。

答えて

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. 

うまくいけば、彼らはあなたが解決策を見つけるのに役立つまたはMozilla NSSプロジェクトでバグレポートを提出することができる

関連する問題