GCC 4.2.1在iPhone的Cygwin(Win7 64位)上编译

GCC 4.2.1在iPhone的Cygwin(Win7 64位)上编译,iphone,compiler-construction,cygwin,windows-7,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/bi

这需要很长时间来解释,但简短的版本是,我目前正在尝试为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的raw.ipsw包,再次在那里找不到libSystem.dylib的副本。我解包了iPhoneSDK和macossdk,并设法在两者中找到了它的副本,但这个错误一直存在。我复制了libSystem.dylib,libSystem.B.dylib,尝试了各种重命名libc.dylib的组合,但仍然只有错误。我找不到方法让它识别文件并链接到它。我还尝试了与iphonesdk中的libc.a进行链接,但也没有成功。我检查了一下。/xgcc正在发射什么,这是我新制作的arm-apple-darwin-ld64,应该可以

这里有一点背景。我构建了LLVM+Clang 2.8,没有任何错误,并且通过一些轻微的修改重新构建了ODCCTools,以使其能够在Cygwin上编译(如果可以,我将在补丁中发布我的更改以及教程)。我还抓到了iphonedev的“includes”和“csu”项目,以及那些成功完成的项目,尽管它们真的没有意义,因为我无法将它们链接到crt0.a。我的想法都快用完了


有人能帮我解决这个问题吗?

我想我可能已经发现了错误。在ODCCTools的深处,在第2905行的ld.cpp中,它无法重新映射文件(因此产生了美妙的消息)。由于文件足够小,因此不必担心它,我只是暂时删除了该重新映射,然后重新寻址指针。我将花一点时间为长期解决方案提出一个更好的修复方案(以及一个ODCCTools在Cygwin下工作的补丁)


如果一切按计划进行,那么今晚晚些时候我会让GCC编译器在Cygwin下为iPhone交叉编译。

我应该注意,我已经检查了好几次命令行,并且我已经验证了-l和库之间没有空格(谷歌上的每一次搜索都表明这是错误),只是为了澄清一下,ARMv7编译器不工作,默认为使用ODCCTools的通用ARM程序集。除此之外,一切正常,我发誓我会在以后发布一篇HOWTO。我知道这是一篇老文章,但我一直在到处寻找说明和/或补丁,以获得针对cygwin的iphone 4s的svn odcctools。这是我发现的唯一一篇帖子,我想知道你是否曾经抽出时间来发布一篇“howto”?