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

时间:2009-09-01 23:50:35

标签: iphone xcode compiler-errors osx-snow-leopard

刚刚升级到Snow Leopard,安装了Xcode 3.2,然后安装了适用于SL的iPhone SDK 3.

在一个项目中,我现在在构建时遇到以下错误:

  

ld:找不到-lcrt1.10.6.o

的库

我在网上搜索过,但没有找到任何帮助。

12 个答案:

答案 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之前和之后调用的函数)。

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

首先,做一些调查,例如:

  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
    
  3. 正如您在上面的示例中所看到的,MacOSX10.5缺少crt1.10.6.o

    解决方案1 ​​

    您可以通过创建指向其他环境的丢失文件的链接来解决此问题,也可以更改部署目标。 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
    

    解决方案2

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

    CC=/path/to/gcc-3.4 make
    

    解决方案3

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

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

答案 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的作者)的答案,他通过使用符号链接修正了这个具体问题(顺便说一句,有人引用了这个页面),但他注意到这不是最好的办法。