问题
I'm trying to install moddims on OS X (see previous question), an Apache module with a dependency on ImageMagick.
As far as I can tell, the OS X Apache is compiled as 64 bit. My previous attempt to run the moddims module I had compiled gave the following error:
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
I'm presuming that means I need to compile moddims as 64 bit... so I tried the following:
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/
But that gave me this error:
checking for MagickWandGenesis in -lMagickWand... no
checking for MagickWandGenesis in -lWand... no
configure: error: ImageMagick not found.
Previously, when compiling without the CFLAGS 64 bit stuff, this had worked just fine.
So... I'm guessing this means I need to compile ImageMagick as 64bit. I tried the following:
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'
That ./configure command runs fine, but when I run make
it trundles along happily for a while and then dies with this error:
/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
I'm alread out of my depth, but now I'm totally stuck! Any ideas?
回答1:
My general trick for ensuring things compile 64-bit (or 32-bit, mutatis mutandis) is:
CC="gcc -m64" ...other environment... ./configure ...configure arguments...
This treats the C compiler (add CXX="g++ -m64"
if you need C++ too) as a 64-bit compiler by virtue of the '-m64
' argument. It may or may not be elegant - it is what I use on both Solaris and MacOS X. There can also be package-specific options to the ./configure
script that control this (occasionally override this); use './configure --help
' to see whether this is so.
The problem looks to be that the libtool
was set up as a 32-bit system. Before changing to the 64-bit build, make sure you've run 'make distclean
' to get rid of all the debris - or remove the build directory altogether and re-extract the material from the tar-ball. Run the configure process as shown - the chances are decent that will be sufficient.
回答2:
You need to add LDFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64"
to your ./configure
calls and it should compile fine.
That said I think you'll end up with a half-working ImageMagick install unless you also make sure libjpeg and libpng are compiled with 64bits as well.
You might try starting httpd using the i386 (32bit) binary instead by adding /usr/bin/arch -i386
to /System/Library/LaunchDaemons/org.apache.httpd.plist
. Or you can use lipo to convert /usr/sbin/httpd
to a i386 only binary.
来源:https://stackoverflow.com/questions/1185287/compiling-imagemagick-as-64bit-under-os-x