GCC 4.2.1在iPhone上使用Cygwin(Win7 64位)进行编译

时间:2011-03-07 15:11:19

标签: iphone compiler-construction cygwin windows-7

这需要很长时间来解释,但简短的版本是我目前正在尝试编译ARMv7的LLVM GCC前端来编译Cortex-A8(iPhone 3GS)的应用程序。我在编译libgcc(gcc编译过程的一部分)时遇到LD的错误,这让我很生气!

命令是这样的:

/usr/llvm-gcc-4.2-2.8.source/build/./gcc/xgcc \
-B/usr/llvm-gcc-4.2_2.8.source/build/./gcc \
-B/usr/local/arm-apple-darwin/bin \
-B/usr/local/arm-apple-darwin/lib \
-isystem /usr/local/arm-apple-darwin/include \
-isystem /usr/local/arm-apple-darwin/sys-include \
-O2 -g -W -Wall -Wwrite-strings -wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -fno-inline -dynamiclib -nodefaultlibs -W1,-dead_strip \
-marm \
-install_name /usr/local/arm-apple-darwin/lib/libgcc_s.1.dylib \
-single_module -o ./libgcc_s.1.dylib.tmp \
-W1,-exported_symbols_list,libgcc/./libgcc.map
-compatibility_version 1 -current_version 1.0
-DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc \
... long list of .o files ... \
-lc

结果通常是很多未定义的对malloc,free,exit等的引用,这些引用通常表明libc没有被编译。在浏览了ld抛出的错误列表之后,我看到了顶部它试图引入/usr/lib/libc.a并抱怨它不是正确的平台。好的,这是有道理的,所以我花了5分钟在谷歌上找到了答案。事实证明,如果我复制libSystem.dylib并将其重命名为libc.dylib,那应该可以解决问题,但事实并非如此。我在手机上找不到该文件的副本,因此我直接从SDK中删除了该文件。然后我得到了这个奇怪的错误:

ld64: in /usr/local/arm-apple-darwin/lib/libc.dylib, can't re-map file, errno=22

此时,我做了我能想到的一切。我从我的iphone中抓取了我的/ usr / lib文件夹的新副本,并确认libSystem.dylib(和libSystem.B.dylib)不存在。我解压缩了iOS 4.2.1的原始.ipsw包,再一次,我找不到libSystem.dylib的副本。我解压缩了iPhoneSDK和MacOS SDK,我设法在两者中找到了它的副本,但这个错误只是保持不变。我复制了libSystem.dylib,libSystem.B.dylib,尝试了各种重命名组合到libc.dylib,但仍然只有错误。我找不到让它识别文件并链接它的方法。我也尝试链接到位于iphone SDK中的libc.a,但也没有用。我检查了什么./xgcc正在开火,这是我刚刚制作的arm-apple-darwin-ld64副本应该没问题。

这里有一点背景知识。我构建了LLVM + Clang 2.8,没有任何错误,我重新编写了ODCCTools并进行了一些轻微的修改,以便在Cygwin上进行编译(如果我可以使用它,我将在补丁中发布我的更改以及教程)。我还抓住了iphone-dev“includes”和“csu”项目以及那些已经成功完成的项目,虽然它们没有任何意义,因为我无法将它与crt0.a链接起来。我在这里没有想法。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我想我可能已经发现了错误。在ODCCTools内部,在第2905行的ld.cpp内部,它无法重新映射文​​件(因此是精彩的消息)。由于文件足够小而不用担心它,我只是暂时删除了重新映射,只是重新寻址指针。我将花一点时间为一个长期解决方案提供更好的解决方案(以及ODCCTools在Cygwin下工作的补丁)。

如果一切按计划进行,那么今晚我将在Cygwin下为GCC编译器进行交叉编译。