刚刚升级到Snow Leopard,安装了Xcode 3.2,然后安装了适用于SL的iPhone SDK 3.
在一个项目中,我现在在构建时遇到以下错误:
的库
ld
:找不到-lcrt1.10.6.o
我在网上搜索过,但没有找到任何帮助。
答案 0 :(得分:15)
修改项目设置 - >在构建标签中 - >对于Mac OS X部署目标,对于XCode 3将其更改为10.5(即使在10.6上也不是10.6)并查看是否有帮助。
对于XCode 4,您需要将其设置为10.6
P.S。确保为所有目标设置,而不仅仅是发布或调试。 (如果你没有,一个会失败,另一个则不会)
答案 1 :(得分:11)
将以下内容添加到〜/ .profile(适用于Mac OS X 10.5):
export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
答案 2 :(得分:6)
我能够通过在Makefile中添加以下内容来解决这个问题:
CFLAGS="$(OTHER_CFLAGS) -mmacosx-version-min=10.5"
LDFLAGS="$(OTHER_LDFLAGS) -mmacosx-version-min=10.5"
表面上看,只有在Xcode之外构建时才需要这样做。这个问题让我感到很沮丧,以至于我认为在这里分享我的经验会很有用。
答案 3 :(得分:3)
看起来你正在从/ usr / lib中获取库,这完全不适合iPhone SDK。我假设您已更改构建设置以将/ usr / lib添加到库搜索路径。首先应该完全没有必要,因为/ usr / lib在编译器的标准搜索路径中,但是如果你需要像这样修改一个搜索路径,请确保改为使用$(SDKROOT)/usr/lib
。
答案 4 :(得分:2)
将部署目标设置为编译器默认值可解决问题。不要改变其他任何东西。
答案 5 :(得分:2)
编译器通常使用crt1.o
结合crt [i / n] .o和crt [begin / end] .o来支持构造函数和析构函数(在main和exit之前和之后调用的函数)。
此错误可能是由特定部署目标的缺少库文件引起的。
首先,做一些调查,例如:
列出所有部署目标:
ls -la /Developer/SDKs
查找哪些crt1
库有哪些环境
find /Developer/SDKs -name crt1\*
您可以看到类似的内容:
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.10.5.o
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.5.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o
/Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.o
正如您在上面的示例中所看到的,MacOSX10.5缺少crt1.10.6.o
。
您可以通过创建指向其他环境的丢失文件的链接来解决此问题,也可以更改部署目标。 E.g。
ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o /Developer/SDKs/MacOSX10.5.sdk/usr/lib/
缺少的其他原因是您可以在系统中安装不同的gcc
。 E.g:
which gcc
xcrun -find gcc
brew list | grep gcc; brew list gcc47
因此,当您使用make进行编译时,您实际上可以通过CC变量指定正确的编译器。 E.g。
CC=/path/to/gcc-3.4 make
您还可以尝试为gcc指定正确的目标部署环境变量,例如:
export MACOSX_DEPLOYMENT_TARGET=10.5
如果此方法有效,则可以将此库路径添加到shell配置文件(~/.profile
)。
E.g。
export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include
export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
或通过临时导出它们。
使用以下代码创建示例conftest.c
文件:
#ifdef __GNUC__
yes;
#endif
尝试通过以下方式编译它:
gcc conftest.c
cc conftest.c
cc conftest.cc conftest.c
答案 6 :(得分:1)
在这一个上浪费了几个小时......
有趣的是,对我来说问题只适用于Simulator-Debug。 它没有抱怨Simulator-Release或Device Debug / Release!
无论如何,将部署目标改为10.5解决了这个问题!!
答案 7 :(得分:1)
通过将Mac OS X部署目标设置为10.5并在此设置回编译器默认值之后解决了此问题:)
答案 8 :(得分:1)
当我在一台机器上使用Xcode 4而在另一台机器上使用Xcode 3.2.6时遇到了这个问题。这两个版本应该能够在它们之间交换.xcodeproj文件,但我发现在project.pbxproj文件中(在.xcodeproj目录中),仍有几个地方可读:
MACOSX_DEPLOYMENT_TARGET = 10.6;
我退出Xcode并将三次更改为:
MACOSX_DEPLOYMENT_TARGET = 10.5;
重新开放项目后,我可以再次建造。呼!
答案 9 :(得分:1)
我有同样的错误消息,上述解决方案都不适合我。我通过删除xcodeproj文件中的* .pbxuser和* .mode1v3文件解决了这个问题。
答案 10 :(得分:1)
我在Fortran Makefile中遇到了同样的问题。 在编译器之后添加以下选项(对于OSX 10.5):
-L /开发商/软件开发工具包/ MacOSX10.5.sdk / usr / lib中
例如,
g77 -L / Developer / SDKs / MacOSX10.5.sdk / usr / lib
现在编译器会找到你想要的库!
答案 11 :(得分:0)
将以下内容添加到〜/ .profile(适用于Mac OS X 10.5):export C_INCLUDE_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/include export LIBRARY_PATH=/Developer/SDKs/MacOSX10.5.sdk/usr/lib
考虑到Kirandan的有限场景(Snow Leopard,Xcode 3.2.1,iphone,库路径错误),Stefan的回答(上图)对我有用,除了我的例外是10.5(-lcrt1.10.5.o)。
在其他地方,我看到了Gabor Cselle(reMail的作者)的答案,他通过使用符号链接修正了这个具体问题(顺便说一句,有人引用了这个页面),但他注意到这不是最好的办法。