[英]Error in xcode project: ld: library not found for -lcrt1.10.6.o
刚刚升级到Snow Leopard,安装了Xcode 3.2,然后安装了适用于SL的iPhone SDK 3。
在一个项目中,我现在在构建时遇到以下错误:
ld
:找不到-lcrt1.10.6.o
库
我在网上搜索过,但没有找到任何帮助。
编辑项目设置 - >在构建选项卡 - >对于Mac OS X部署目标,将其更改为10.5,对于XCode 3(即使在10.6上也不是10.6),看看是否有帮助。
对于XCode 4,您需要将其设置为10.6
PS确保为所有目标设置,而不仅仅是发布或调试。 (如果你没有,一个会失败,另一个不会)
将以下内容添加到〜/ .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
我能够通过将以下内容添加到我的Makefile来解决此问题:
CFLAGS="$(OTHER_CFLAGS) -mmacosx-version-min=10.5"
LDFLAGS="$(OTHER_LDFLAGS) -mmacosx-version-min=10.5"
表面上看,只有在Xcode之外构建时才需要这样做。 这个问题让我感到很沮丧,我认为在这里分享我的经验会很有用。
看起来你正在从/ usr / lib中获取库,这完全不适合iPhone SDK。 我假设您已更改构建设置以将/ usr / lib添加到库搜索路径。 首先应该完全没有必要,因为/ usr / lib在编译器的标准搜索路径中,但是如果你需要像这样修改一个搜索路径,请确保使用$(SDKROOT)/usr/lib
。
编译器通常使用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
您可以通过创建指向其他环境的缺失文件的链接来解决此问题,也可以更改部署目标。 例如
ln -s /Developer/SDKs/MacOSX10.6.sdk/usr/lib/crt1.10.6.o /Developer/SDKs/MacOSX10.5.sdk/usr/lib/
其缺失的其他原因是您可以在系统中安装不同的gcc
。 例如:
which gcc
xcrun -find gcc
brew list | grep gcc; brew list gcc47
因此,当您使用make进行编译时,您实际上可以通过CC变量指定正确的编译器。 例如
CC=/path/to/gcc-3.4 make
您还可以尝试为gcc指定正确的目标部署环境变量,例如:
export MACOSX_DEPLOYMENT_TARGET=10.5
如果这样可行,则可以将此库路径添加到shell配置文件( ~/.profile
)。 例如
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
将部署目标设置为编译器默认值可解决此问题。 不要改变任何其他东西。
在这一个上浪费了几个小时......
有趣的是,对我来说问题只适用于Simulator-Debug。 它没有抱怨Simulator-Release或Device Debug / Release!
无论如何,将部署目标改为10.5解决了这个问题!
通过将Mac OS X部署目标设置为10.5并在此设置回编译器默认值后解决此问题:)
当我在一台机器上使用Xcode 4而在另一台机器上使用Xcode 3.2.6时遇到了这个问题。 这两个版本应该能够在它们之间交换.xcodeproj文件,但是我发现在project.pbxproj文件中(在.xcodeproj目录中),还有几个地方可以读取:
MACOSX_DEPLOYMENT_TARGET = 10.6;
我退出Xcode并将三次更改为:
MACOSX_DEPLOYMENT_TARGET = 10.5;
重新打开项目后,我可以再次构建。 呼!
我有相同的错误消息,上述解决方案都不适合我。 我通过删除xcodeproj文件中的* .pbxuser和* .mode1v3文件解决了这个问题。
我在Fortran Makefile中遇到了同样的问题。 在编译器之后添加以下选项(对于OSX 10.5):
-L /开发商/软件开发工具包/ MacOSX10.5.sdk / usr / lib目录
例如,
g77 -L / Developer / SDKs / MacOSX10.5.sdk / usr / lib
现在编译器将找到您想要的库!
将以下内容添加到〜/ .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的作者)的答案,他通过使用符号链接(顺便提到这个页面的某个人)解决了这个具体问题,但他注意到这不是最好的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.