2009-07-26 5 views
0

Ich versuche moddims auf OS X zu installieren (siehe previous question), ein Apache-Modul mit einer Abhängigkeit von ImageMagick.Kompilieren von ImageMagick als 64bit unter OS X?

Soweit ich das beurteilen kann, ist der OS X Apache als 64 Bit kompiliert. Mein früherer Versuch, die moddims Modul auszuführen Ich gab den folgenden Fehler zusammengestellt hatte:

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 

Ich bin der Annahme, dass heißt, ich brauche moddims als 64 Bit zu kompilieren ... so habe ich versucht, die folgenden:

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/ 

Aber das gab mir diesen Fehler:

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

Früher, als ohne die CFLAGS 64-Bit-kompilations, das ganz gut gearbeitet hatte.

Also ... ich denke, das bedeutet, ich muss ImageMagick als 64bit kompilieren. Ich habe versucht, die folgenden:

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' 

Das ./configure-Befehl fein läuft, aber wenn ich make laufen trudelt es glücklich für eine Weile zusammen und stirbt dann mit diesem Fehler:

/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 

Ich bin alread aus meiner Tiefe, aber jetzt bin ich total fest! Irgendwelche Ideen?

+0

Die durch eine Abstimmung verursachte Verwirrung "gehört auf superuser.com" ist mühsam - was zur Hölle gehört StackOverflow mehr? Es war * viel * einfacher, wenn es nur einen Ort zum Schauen gab. –

Antwort

1

Mein allgemeiner Trick Dinge, um sicherzustellen, kompiliert 64-Bit (oder 32-Bit, mutatis mutandis) ist:

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

Diese behandelt die C-Compiler (add CXX="g++ -m64", wenn Sie C benötigen ++ auch) als 64- Bit-Compiler aufgrund des Arguments '-m64'. Es mag elegant sein oder nicht - das ist es, was ich sowohl unter Solaris als auch unter MacOS X verwende. Es kann auch paketspezifische Optionen für das Skript ./configure geben, das dies steuert (gelegentlich außer Kraft setzen); Verwenden Sie './configure --help', um festzustellen, ob dies der Fall ist. Das Problem scheint zu sein, dass das libtool als 32-Bit-System eingerichtet wurde. Bevor Sie zum 64-Bit-Build wechseln, vergewissern Sie sich, dass Sie "make distclean" ausgeführt haben, um alle Trümmer loszuwerden - oder entfernen Sie das Build-Verzeichnis vollständig und extrahieren Sie das Material erneut aus dem Teerball. Führen Sie den Konfigurationsvorgang wie gezeigt aus - die Chancen stehen gut, das reicht aus.

0

Sie müssen LDFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" Ihre ./configure Anrufe hinzufügen und es sollte gut kompilieren.

Das heißt, ich denke, Sie werden mit einer halb-Arbeit ImageMagick Installation enden, wenn Sie auch sicherstellen, dass libjpeg und libpng auch mit 64-Bit kompiliert werden.

Sie könnten versuchen, httpd mit dem i386 (32bit) binär zu starten, statt /usr/bin/arch -i386 zu /System/Library/LaunchDaemons/org.apache.httpd.plist hinzuzufügen. Oder Sie können Lipo verwenden, um /usr/sbin/httpd in ein i386 nur binär zu konvertieren.