在/usr/lib/system/libcache.dylib中,缺少必需的体系结构armv6

时间:2012-03-27 16:58:52

标签: ios

在尝试编译iphoneos,Xcode4的虚拟程序时,gcc似乎没有超出最初的sysroot目录

$ echo $ISYSROOT
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
$ gcc -arch armv6 --sysroot=$ISYSROOT  test.cpp
ld: in /usr/lib/system/libcache.dylib, missing required architecture armv6 in file for architecture armv6
collect2: ld returned 1 exit status

如果我遗漏了sysroot,

$ gcc -arch armv6  test.cpp
ld: warning: ignoring file /usr/lib/crt1.o, missing required architecture armv6 in file
ld: warning: ignoring file /usr/lib/libgcc_s.1.dylib, missing required architecture armv6 in file
ld: warning: ignoring file /usr/lib/libSystem.dylib, missing required architecture armv6 in file
Undefined symbols for architecture armv6:
  "start", referenced from:
     -u command line option
ld: symbol(s) not found for architecture armv6
collect2: ld returned 1 exit status

以下作品,但感觉非常俗气,而且不具备可扩展性。这是怎么回事?

$ gcc -arch armv6  -L$ISYSROOT/usr/lib/system --sysroot=$ISYSROOT  test.cpp

更新。显然这是一个已知问题,但仍不清楚如何将sysroot传递给gcc但isysroot传递给ld

http://www.doitscared.com/?m=201104

  

编译库时,如果看到此错误“ld:找不到文件:   /usr/lib/system/libcache.dylib for architecture armv7“,然后你的   链接器命令使用“-sysroot”,它在Xcode 4中不起作用。   而是将链接器命令更改为使用“-isysroot”。 (注意:这个   仅适用于链接器命令。编译命令必须继续   使用“-sysroot”。有关详细信息,请参见此处。)

1 个答案:

答案 0 :(得分:0)

将项目的部署目标更改为至少4.3,它将起作用。这是XCode 4的问题,但实际上不需要将应用程序部署到4.3之前的iOS版本。 iOS用户倾向于与iOS版本保持同步。