【问题标题】:How can I compile object code for the wrong system and cross compiling question?如何为错误的系统编译目标代码和交叉编译问题?
【发布时间】:2009-08-11 16:23:04
【问题描述】:

关于编译的参考this question。我不明白我的 Mac 程序如何使用正确的 -arch,使用那些 -arch 标志编译,-arch 标志适用于我所在的系统(ppc64 g5),但仍然产生错误的目标代码。

另外,如果我使用交叉编译器并且在 Linux 上为 mac 生成 10.5 代码,这与我上面描述的有何不同?

背景是我尝试编译各种 apache 模块。它们使用 -arch ppc、ppc64 等进行编译。我没有收到任何错误,我得到了我的 mod_whatever.so。但是,apache 总是会抱怨找不到某些符号。显然,它与编译器生成的内容有关,即使文件类型表明它是用于 ppc、ppc64、i386、x_64(通用二进制)并且似乎与我拥有的所有其他 .so 模块匹配。

我想我不明白它如何为我的系统编译而没有问题,然后说我的系统不能使用它。也许我不明白编译器实际上给了我什么。

编辑:所有错误信息和完整过程都可以看到here

谢谢。

【问题讨论】:

  • 您需要更具体。您看到的具体错误消息是什么?

标签: macos cross-compiling


【解决方案1】:

查看其他线程和其他地方并且没有安装 G5 或 OSX 服务器,我只能提出一些 cmets 和建议,但也许它们会有所帮助。

  1. 修改操作系统供应商安装的软件通常不是一个好主意。安装一个新的 Apache 模块比覆盖现有库的问题要少,但您仍然受供应商的摆布,因为软件更新可能会删除您的修改,除此之外,您必须弄清楚供应商的版本是如何的建在首位。 OS X 世界的一个常见做法是通过使用例如MacPorts 完全独立地安装开源产品(如 Apache)来避免这种情况。这也有它的缺点:为了实现高度的独立性,MacPorts 经常会为已经在 OS X 中的东西下载和构建大量依赖包,但除了一些额外的构建周期和磁盘空间之外没有什么害处.

  2. 也就是说,应该可以构建和安装 apache 模块来补充 Apple 提供的模块。 Apple 确实发布了它对开源产品所做的更改here;您可以在那里深入了解各种版本以找到包含源代码、Makefile 和应用补丁的 apache 目录。这可能会有所帮助。

  3. 确保您构建的 mod_*.so 是真正的 64 位,并且不依赖于任何非 64 位库。使用 otool -L mod_*.so 查看每个引用的动态库,然后在这些库上使用 file 以确保它们都具有 ppc64 变体。

  4. 确保您使用的是最新的开发人员工具(Xcode 3.1.3 是最新的)。

  5. 虽然开发者工具链使用了很多开源组件,但 Apple 已经增强了许多组件,并且在 OS X 的 ABI、通用二进制支持、动态库等方面存在很大差异。底线是交叉编译Linux(或任何其他非 OS X 平台)上以 OS X 为目标的目标代码既不受支持也不实用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多