【发布时间】: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