【问题标题】:Compiling ImageMagick as 64bit under OS X?在 OS X 下将 ImageMagick 编译为 64 位?
【发布时间】:2010-11-14 04:36:12
【问题描述】:

我正在尝试在 OS X 上安装 moddims(参见 previous question),这是一个依赖于 ImageMagick 的 Apache 模块。

据我所知,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 时,它愉快地滚动了一段时间,然后死于此错误:

/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

我已经超出了我的深度,但现在我完全陷入了困境!有什么想法吗?

【问题讨论】:

  • “属于 superuser.com”的投票引起的混乱很麻烦—— StackOverflow 上到底有什么?当只有一个地方可以查看时,它要简单得多

标签: macos makefile imagemagick compilation configure


【解决方案1】:

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

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

这通过“-m64”参数将 C 编译器(如果您也需要 C++,添加 CXX="g++ -m64")视为 64 位编译器。它可能优雅也可能不优雅——这是我在 Solaris 和 MacOS X 上使用的。./configure 脚本也可以有特定于包的选项来控制它(有时会覆盖它);用'./configure --help'看看是不是这样。

问题似乎是libtool 被设置为 32 位系统。在更改为 64 位构建之前,请确保您已运行“make distclean”以清除所有碎片 - 或完全删除构建目录并从 tar-ball 中重新提取材料。如图所示运行配置过程 - 机会是足够的。

【讨论】:

    【解决方案2】:

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

    也就是说,除非您还确保 libjpeg 和 libpng 也是使用 64 位编译的,否则我认为您最终会安装一半工作的 ImageMagick。

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

    【讨论】:

      猜你喜欢
      • 2012-01-31
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多