ld:警告:section __DATA / __ objc_imageinfo__DATA意外的大尺寸

有人知道这个警告是什么意思吗? 之后是错误:

Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1

这是一个iPad的Xcode项目。 我只在编译模拟器时看到这个,而不是设备。 我有一个静态库(* .a)链接到这个项目,这是我认为这是失败的。 此外,它曾经在模拟器上运行没有问题,我不知道是什么改变。

所有的编译器输出:

 Ld /Users/cduckering/Library/Developer/Xcode/DerivedData/IQ-bldfqilntfqfrccozykbqulagovx/Build/Products/Debug-iphonesimulator/IQ.app/IQ normal i386 cd /Users/cduckering/Desktop/LitePoint/Apps/App/IQ setenv MACOSX_DEPLOYMENT_TARGET 10.6 setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/cduckering/Library/Developer/Xcode/DerivedData/IQ-bldfqilntfqfrccozykbqulagovx/Build/Products/Debug-iphonesimulator -F/Users/cduckering/Library/Developer/Xcode/DerivedData/IQ-bldfqilntfqfrccozykbqulagovx/Build/Products/Debug-iphonesimulator -filelist /Users/cduckering/Library/Developer/Xcode/DerivedData/IQ-bldfqilntfqfrccozykbqulagovx/Build/Intermediates/IQ.build/Debug-iphonesimulator/IQ.build/Objects-normal/i386/IQ.LinkFileList -mmacosx-version-min=10.6 -dead_strip -ObjC -all_load -fprofile-use -Xlinker -objc_abi_version -Xlinker 2 -lCorePlot-CocoaTouch -weak_framework QuickLook -weak_framework MessageUI -framework QuartzCore -framework UIKit -framework Foundation -framework CoreGraphics -Xlinker -object_path_lto -Xlinker /Users/cduckering/Library/Developer/Xcode/DerivedData/IQ-bldfqilntfqfrccozykbqulagovx/Build/Intermediates/IQ.build/Debug-iphonesimulator/IQ.build/Objects-normal/i386/IQ.lto_temporary.o -o /Users/cduckering/Library/Developer/Xcode/DerivedData/IQ-bldfqilntfqfrccozykbqulagovx/Build/Products/Debug-iphonesimulator/IQ.app/IQ ld: warning: section __DATA/__objc_imageinfo__DATA has unexpectedly large size 368 in /Users/cduckering/Library/Developer/Xcode/DerivedData/IQ-bldfqilntfqfrccozykbqulagovx/Build/Intermediates/IQ.build/Debug-iphonesimulator/IQ.build/Objects-normal/i386/IQ.lto_temporary.o Assertion failed: (_mode == modeFinalAddress), function finalAddress, file /SourceCache/ld64/ld64-123.2/src/ld/ld.hpp, line 573. 0 0x10001286c __assert_rtn + 76 1 0x10008c71c ld::tool::OutputFile::addressOf(ld::Internal const&, ld::Fixup const*, ld::Atom const**) + 188 2 0x10008ed58 ld::tool::OutputFile::applyFixUps(ld::Internal&, unsigned long long, ld::Atom const*, unsigned char*) + 2840 3 0x10008b62e ld::tool::OutputFile::writeOutputFile(ld::Internal&) + 814 4 0x10008431c ld::tool::OutputFile::write(ld::Internal&) + 156 5 0x100012e3f main + 1247 6 0x100000e14 start + 52 collect2: ld returned 1 exit status Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1 

该错误是一个内部错误,当LLVM编译器未find它期望在最终链接时间优化阶段期间find的符号时,似乎发生。 一个常见的原因是链接到一个静态库已经有一些重要的符号剥离(在链接静态库本身时,不会产生错误,但如果库是dynamic链接的话会产生错误)。

尽pipeLLVM也没有报告错误,但正确的解决方法是确保静态库在链接期间贡献所有符号。 尝试检查项目中包含的静态库的构build设置,确保禁用链接产品(.a文件)的剥离或将其设置为仅剥离debugging符号。

如果您不控制静态库的构build,解决方法是禁用LLVM中的链接时间优化,尽pipe这可能会导致生成次优代码。

解决了。

当我将名为“C / C ++ Compiler Version”的编译设置从“LLVM GCC 4.2”更改为“GCC 4.2”时,此警告和错误消失。

只有在生成设置“链接时间优化”(LLVM_LTO = YES)启用时,我才会得到“意想不到的大尺寸”。 我build议保持禁用(默认)。