【问题标题】:in /usr/lib/system/libcache.dylib, missing required architecture armv6在 /usr/lib/system/libcache.dylib 中,缺少所需的架构 armv6
【发布时间】:2012-04-11 06:11:15
【问题描述】:

在尝试为 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: file not found: /usr/lib/system/libcache.dylib 对于架构 armv7”,然后你的 链接器命令使用“–sysroot”,这在 Xcode 4 中不起作用。 相反,将链接器命令更改为使用“-isysroot”。 (注:这 仅适用于链接器命令。编译命令必须继续 使用“–sysroot”。有关详细信息,请参见此处。)

【问题讨论】:

  • 谢谢! $ gcc -arch armv6 -L$ISYSROOT/usr/lib/system --sysroot=$ISYSROOT test.cpp 确实帮助了我!

标签: ios


【解决方案1】:

将您的项目的部署目标更改为至少 4.3 并且它将起作用。这是 XCode 4 的问题,但实际上不需要将应用程序部署到 4.3 之前的 iOS 版本。 iOS 用户倾向于使用他们的 iOS 版本保持最新状态。

【讨论】:

  • 我被困在 4.2.1 的旧 iOS 设备上,无法升级到该点 - 我只是想为它编译 ncurses。什么都不感谢。
猜你喜欢
  • 2011-10-26
  • 2013-12-03
  • 2012-04-03
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多