如何为错误的系统编译目标代码并交叉编译问题?

时间:2009-08-11 16:23:04

标签: macos cross-compiling

有关编译的参考this question。我不明白我的Mac程序如何使用right -arch,使用那些-arch标志进行编译,-arch标志用于我所使用的系统(ppc64 g5),并且仍然产生错误的目标代码。 / p>

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

查看其他线程和其他地方,如果没有安装G5或OSX Server,我只能提出一些意见和建议,但也许会有所帮助。

  1. 修改o / s供应商安装的软件通常不是一个好主意。安装新的Apache模块比覆盖现有库的问题要少,但是你仍然受供应商的支配,因为软件更新可以删除你的修改,除此之外你必须弄清楚供应商的版本是怎样的建在第一位。 OS X世界中的一种常见做法是通过使用例如MacPorts完全单独安装开源产品(如Apache)来避免这种情况。这也有其缺点:为了实现高水平的独立性,MacPorts通常会为已经在OS X中的东西下载和构建许多依赖包,但除了一些额外的构建周期和磁盘空间之外没有任何其他问题。

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

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

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

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