繁体   English   中英

xcode项目出错:ld:找不到-lcrt1.10.6.o的库

[英]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之前和之后调用的函数)。

此错误可能是由特定部署目标的缺少库文件引起的。

首先,做一些调查,如:

  1. 列出所有部署目标:

     ls -la /Developer/SDKs 
  2. 找到哪个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

解决方案1

您可以通过创建指向其他环境的缺失文件的链接来解决此问题,也可以更改部署目标。 例如

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

解决方案2

因此,当您使用make进行编译时,您实际上可以通过CC变量指定正确的编译器。 例如

CC=/path/to/gcc-3.4 make

解决方案3

您还可以尝试为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文件解决了这个问题。

  1. 控制/单击xcode * .xcodeproj文件
  2. 从菜单中选择“显示包内容”选项
  3. 将打开一个窗口,其中包含内容
  4. 删除以您的用户名开头的pbxuser / mode1v3文件
  5. 重建项目

我在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM