【问题标题】:How do I compile a 32 bit apache module for a 64 bit platform?如何为 64 位平台编译 32 位 apache 模块?
【发布时间】:2010-11-11 20:33:41
【问题描述】:

我正在尝试在 mac os x 10.5.7 上为 apache 完成 mod_auth_kerb。我没有收到编译错误,但是当 apache 尝试加载它时:

org.apache.httpd[95092]:httpd:/private/etc/apache2/httpd.conf 第 160 行的语法错误:无法将 /usr/libexec/apache2/mod_auth_kerb.so 加载到服务器:dlopen(/usr /libexec/apache2/mod_auth_kerb.so, 10):找不到合适的图像。确实找到了:\n\t/usr/libexec/apache2/mod_auth_kerb.so: mach-o, but wrong architecture

我在 make 文件中尝试了以下内容:

ARCHFLAGS='-arch ppc64' CPPFLAGS = -I。 -Ispnegokrb5 $(KRB5_CPPFLAGS) $(KRB4_CPPFLAGS) $(DEFS) -mpowerpc64 -mcpu=G5 -mtune=G5 -arch ppc64 LDFLAGS = $(KRB5_LDFLAGS) $(KRB4_LDFLAGS) $(LIB_resolv) -mpowerpc64 -mcpu=G5 -mtune=G5 -arch ppc64 CFLAGS = -mpowerpc64 -mcpu=G5 -mtune=G5 -arch ppc64

我查看了这些主题:

http://lists.apple.com/archives/unix-porting/2008/Mar/msg00061.html

http://objectmix.com/apache/690208-re-mod_auth_kerb-mac-os-x-10-5-client.html

我也在源代码中更改了这个:

来自 krb5_rc_resolve_full
到 __KerberosInternal_krb5_rc_resolve_full

我无法让 apache 加载它,它声称它是错误的架构。我认为 apache 在这个版本的 mac 服务器中是 64 位的,所以这可能是问题所在。我只是不知道如何通过它。

第 160 行是 httpd.conf 文件中的一条红鲱鱼(它有##)。

我不知道如何正确编译它,希望得到帮助。

我有一个 G5 PPC 64。

谢谢。

编辑:

奇怪的是:

otool -hv mod_auth_kerb.so mod_auth_kerb.so:马赫头 魔术 cputype cpusubtype caps filetype ncmds sizeofcmds flags

MH_MAGIC_64 PPC64 ALL 0x00 BUNDLE 10 1328 NOUNDEFS DYLDLINK TWOLEVEL

所以我不知道出了什么问题。

我在 PPC64 上,这就是我编译的样子。

【问题讨论】:

    标签: apache 64-bit compilation


    【解决方案1】:

    如果我正确地回答了这个问题,我认为您将需要构建/安装一个交叉编译工具链来将它从 PPC 构建到 x86_64 或其他非PPC 架构,甚至在某些情况下,PPC 到 PPC64,反之亦然

    如果您不熟悉 GCC、Unix 工具链和一般达尔文基金会的东西,我不建议您这样做。

    您也许可以在网络上找到 Darwin 工具链设置。一些正确方向的链接:

    1. http://lists.apple.com/archives/darwin-development/2002/Dec/msg00062.html
    2. http://ranger.befunk.com/fink/darwin-cross/
    3. http://myownlittleworld.com/miscellaneous/computers/darwin-cross-distcc.html
    4. http://www.google.com/search?q=Darwin+cross+compilation

    【讨论】:

    • 我没有关注。如果我在 PPC 上,为什么我需要交叉编译器来编译 x86_64?另外,如果它不是“正确的”,为什么它不会给我 -arch ppc64 的错误?只是试图理解,而不是质疑你的智慧。谢谢
    • @Johnny 您的源代码可以正常编译,因为它是正确的,但生成的对象将不是正确的体系结构,也就是说,它不会包含正确的机器代码。 ELF/Mac 风格的对象格式是体系结构中立的,因此它从标头中确定对象是错误的体系结构,而不是尝试运行它。阅读一些关于交叉编译和架构的内容,原因就很明显了。
    • 另外,如果您从源代码编译模块,通常提供的配置脚本将确定正确的架构(即 32 位或 64 位等)。
    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 2011-03-30
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多