2009-07-26 33 views
0

我正在尝试在OS X上安装moddims(请参阅previous question),这是一个依赖ImageMagick的Apache模块。在OS X下将ImageMagick编译为64位?

据我所知,OS X Apache被编译为64位。我以前尝试运行moddims模块我已经编制了以下错误:

httpd: Syntax error on line 117 of /private/etc/apache2/httpd.conf: 
Cannot load /usr/libexec/apache2/libmod_dims.so into server: 
dlopen(/usr/libexec/apache2/libmod_dims.so, 10): no suitable image found. 
Did find:\n\t/usr/libexec/apache2/libmod_dims.so: mach-o, but wrong architecture 

我假定这意味着我需要编译moddims为64位,所以,我尝试了以下内容:

moddims-read-only simon$ ./configure CFLAGS='-arch x86_64' \ 
    APXSLDFLAGS='-arch x86_64' --with-curl=/usr/local/bin/ \ 
    --with-imagemagick=/opt/ImageMagick-6.3.9/ 

但是,这给了我这个错误:

checking for MagickWandGenesis in -lMagickWand... no 
checking for MagickWandGenesis in -lWand... no 
configure: error: ImageMagick not found. 

此前,没有CFLAGS 64位的东西编译时,此工作过就好了。

所以...我猜这意味着我需要将ImageMagick编译为64位。我试过如下:

ImageMagick-6.3.9 simon$ ./configure --prefix=/opt/ImageMagick-6.3.9/ \ 
    --exec-prefix=/opt/ImageMagick-6.3.9/ CFLAGS='-arch x86_64' \ 
    APXSLDFLAGS='-arch x86_64' 

即运行./configure命令运行正常,但是当我运行make它高兴地trundles沿​​一会儿,然后用此错误死亡:

/bin/sh ./libtool --silent --tag=CC --mode=link gcc -arch x86_64 -Wall -W -D_THREAD_SAFE -module -avoid-version -L/usr/X11/lib -R/usr/X11/lib -L/opt/local/lib -lfreetype -lz -o ltdl/dlopen.la ltdl/loaders/dlopen.lo 
/bin/sh ./libtool --silent --tag=CC --mode=link gcc -arch x86_64 -Wall -W -D_THREAD_SAFE -no-undefined -dlpreopen ltdl/dlopen.la -L/usr/X11/lib -R/usr/X11/lib -L/opt/local/lib -lfreetype -lz -o ltdl/libltdlc.la ltdl/loaders/ltdl_libltdlc_la-preopen.lo ltdl/ltdl_libltdlc_la-lt__alloc.lo ltdl/ltdl_libltdlc_la-lt_dlloader.lo ltdl/ltdl_libltdlc_la-lt_error.lo ltdl/ltdl_libltdlc_la-ltdl.lo ltdl/ltdl_libltdlc_la-slist.lo ltdl/argz.lo 
ranlib: archive member: ltdl/.libs/libltdlc.a(argz.o) cputype (7) does not match previous archive members cputype (16777223) (all members must match) 
ranlib: archive member: ltdl/.libs/libltdlc.a(argz.o) cputype (7) does not match previous archive members cputype (16777223) (all members must match) 
make[1]: *** [ltdl/libltdlc.la] Error 1 
make: *** [all] Error 2 

我alread超出我的深度,但现在我完全卡住了!有任何想法吗?

+0

投票'属于superuser.com'导致的混淆很麻烦 - 这个地狱属于StackOverflow吗?当只有一个地方看时,它变得更加简单。 – 2009-07-26 23:06:47

回答

1

我保证事物的一般技巧编译64位(或32位,比照)是:

CC="gcc -m64" ...other environment... ./configure ...configure arguments... 

这把C编译器(添加​​如果你需要C++太)为64由于'-m64'的参数,所以它是一个编译器。它可能会也可能不会很优雅 - 这正是我在Solaris和MacOS X上使用的版本。还可以有./configure脚本的程序包特定选项来控制它(偶尔会覆盖此选项);使用'./configure --help'来查看是否如此。

问题看起来是libtool被设置为32位系统。在更改为64位版本之前,请确保已运行'make distclean'来清除所有碎片 - 或者删除构建目录,然后从tar-ball中重新提取材料。如图所示运行配置过程 - 这样做的可能性就足够了。

0

您需要将LDFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64"添加到您的./configure调用中,它应该编译正常。

这就是说,我认为你最终将得到一个半工作的ImageMagick安装,除非你也确保libjpeg和libpng是用64位编译的。

您可以尝试使用i386(32位)二进制文件启动httpd,而不是将/usr/bin/arch -i386添加到/System/Library/LaunchDaemons/org.apache.httpd.plist。或者,您可以使用lipo将/usr/sbin/httpd转换为仅i386的二进制文件。