2011-03-07 39 views
0

这需要很长时间才能解释,但简短的版本是我目前正试图编译ARMv7的LLVM GCC前端以编译应用程序Cortex-A8(iPhone 3GS)。编译libgcc(gcc编译过程的一部分)时,我遇到了LD中的一个错误,这个错误一直让我发疯!GCC 4.2.1用于iPhone的Cygwin(Win7 64bit)编译

的命令是这样的:

/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,自由,退出等不确定引用这通常表示的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链接。我在这里没有想法了。

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

+0

我应该注意我已经多次检查过命令行,并且我已经验证了-l和库之间没有空格(谷歌上的每个搜索都表明这是错误) – 2011-03-07 15:17:25

回答

0

我想我可能已经发现了错误。在ODCCTools深处,在2905行的ld.cpp里,它没有重新映射文​​件(因此是一个很棒的消息)。由于该文件足够小而不用担心,因此我暂时删除了重新映射并重新指定了指针。我会花一点时间,为长期解决方案提供一个更好的解决方案(以及针对Cygwin工作的ODCCTools补丁)。

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

+0

只是澄清一下,ARMv7编译器不工作,并且默认使用ODCCTools进行通用ARM汇编。除此之外,一切正常,我发誓我稍后会发布HOWTO。 – 2011-03-08 11:33:36

+0

我知道这是一个旧帖子,但我一直在寻找指令和/或补丁的高和低,以获得svn odcctools针对iPhone 4s在cygwin工作。这是我发现的唯一帖子,想知道你是否曾经发布过“howto”? – crazyhatfish 2012-05-03 17:19:17