解决一个JCC编译构建问题
首先是环境: [code=“bash”] iusr-mbp:~ iusr$ uname -a Darwin iusr-mbp 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386 iusr-mbp:~ iusr$ python -V Python 2.7 [/code] JCC是最新的pylucene-3.1.0-1里面的那份儿。 起因是想做个小东西,预计要用到Lucene。别看我不怎么用它,可我还真嫌java干起来太麻烦…虽然做这个也想为了方便工作时用,可也算业余时间折腾吧,实在懒得一本正经地Java。所以选择了PyLucene,自然,以前也没接触过。 按照http://lucene.apache.org/pylucene/jcc/documentation/install.html 上的说明,看起来不难,可惜,果不其然,到了我这里就出问题了,诶。 出问题时的输出: [code=“bash”] iusr-mbp:jcc iusr$ python setup.py build running build running build_py writing /private/tmp/pylucene-3.1.0-1/jcc/jcc/config.py copying jcc/config.py -> build/lib.macosx-10.5-fat3-2.7/jcc copying jcc/classes/org/apache/jcc/PythonVM.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc copying jcc/classes/org/apache/jcc/PythonException.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc running build_ext building ‘jcc’ extension gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch ppc -arch x86_64 -g -O2 -DNDEBUG -g -O3 -dynamiclib -D_jcc_lib -DJCC_VER=“2.8” -I/System/Library/Frameworks/JavaVM.framework/Headers -I_jcc -Ijcc/sources -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c jcc/sources/jcc.cpp -o build/temp.macosx-10.5-fat3-2.7/jcc/sources/jcc.o -DPYTHON -fno-strict-aliasing -Wno-write-strings /usr/libexec/gcc/powerpc-apple-darwin10/4.0.1/as: assembler (/usr/bin/../libexec/gcc/darwin/ppc/as or /usr/bin/../local/libexec/gcc/darwin/ppc/as) for architecture ppc not installed Installed assemblers are: /usr/bin/../libexec/gcc/darwin/x86_64/as for architecture x86_64 /usr/bin/../libexec/gcc/darwin/i386/as for architecture i386 lipo: can’t open input file: /var/folders/Gy/Gyqx+dxCGlGc5LULCWn6Zk+++TI/-Tmp-//ccr6jC50.out (No such file or directory) error: command ‘gcc-4.0’ failed with exit status 1 [/code] 也不知道是不是因为XCode刚更新过,给PPC的as明明是在 /usr/libexec/gcc/powerpc-apple-darwin10/4.0.1/as ,好吧,ln -s 一下到/usr/local/libexec/gcc/darwin/ppc/as 下面。结果还是不行…换了个错误: [code=“bash”] iusr-mbp:jcc iusr$ python setup.py build running build running build_py writing /private/tmp/pylucene-3.1.0-1/jcc/jcc/config.py copying jcc/config.py -> build/lib.macosx-10.5-fat3-2.7/jcc copying jcc/classes/org/apache/jcc/PythonVM.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc copying jcc/classes/org/apache/jcc/PythonException.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc running build_ext building ‘jcc’ extension gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch ppc -arch x86_64 -g -O2 -DNDEBUG -g -O3 -dynamiclib -D_jcc_lib -DJCC_VER=“2.8” -I/System/Library/Frameworks/JavaVM.framework/Headers -I_jcc -Ijcc/sources -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c jcc/sources/jcc.cpp -o build/temp.macosx-10.5-fat3-2.7/jcc/sources/jcc.o -DPYTHON -fno-strict-aliasing -Wno-write-strings /usr/bin/../local/libexec/gcc/darwin/ppc/as: can’t fork a new process to execute: /usr/bin/../local/libexec/gcc/darwin/ppc/as (Resource temporarily unavailable) lipo: can’t open input file: /var/folders/Gy/Gyqx+dxCGlGc5LULCWn6Zk+++TI/-Tmp-//ccNXEZps.out (No such file or directory) error: command ‘gcc-4.0’ failed with exit status 1 [/code] 郁闷了。折腾来折腾去都不行,直接cp过去给PPC的as也是不行,而且,真想不通为啥去为PPC编译,反正只是本地自己用。然后只好用python -v setup.py build 看了下输出,查到了编译前要调到distutils.unixcompiler.py,于是看了看源代码,看到有个_darwin_compiler_fixup方法很是可疑——敢情,这方法是会考虑ARCHFLAGS这个环境变量的——是啊!当初折腾编译、make时要折腾的若干叉叉叉FLAGS环境变量之一啊!看来后来一直都是被各种自动化工具养得白痴了,看来生命还是在于折腾。 于是乎, [code=“bash”] iusr-mbp:jcc iusr$ export ARCHFLAGS="-arch x86_64 -arch i386" [/code] x86_64和i386怎么都够我用了~然后再python setup.py build以及python setup.py install,成功。这一来就不用考虑诸如Xapian 这样的东西了,长的跟“下片儿”似的。 P.S.,distutils.unixcompiler._darwin_compiler_fixup前面的一段注释挺好玩,as usual。