【问题标题】:Error in xcode project: ld: library not found for -lcrt1.10.6.oxcode 项目中的错误:ld: library not found for -lcrt1.10.6.o
【发布时间】:2010-11-24 19:29:44
【问题描述】:

刚刚升级到 Snow Leopard,安装了 Xcode 3.2,然后安装了 iPhone SDK 3 for SL。

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

ld: 找不到 -lcrt1.10.6.o 的库

我已经在网上搜索过,但没有找到任何有用的东西。

【问题讨论】:

  • 感谢大家的回答。我最终退出了 Leopard,然后重新安装了 SL、Xcode、SDK。我现在不明白这个问题,所以我不能使用任何人的建议 :) 但如果再次出现,我会参考这个。我想知道是否是因为上次我将项目设置从 GCC 更改为 LLVM(我想尝试“新”编译器:)。这次我没有这样做。
  • 你是如何回到 Leopard 的?时光机?

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


【解决方案1】:

编辑项目设置 -> 在构建选项卡中 -> 对于 Mac OS X 部署目标,将其更改为 XCode 3 的 10.5(即使在 10.6 上也不是 10.6),看看是否有帮助。

对于 XCode 4,您需要将其设置为 10.6

附:确保为所有目标设置它,而不仅仅是发布或调试。 (如果你不这样做,一个会失败,另一个不会)

【讨论】:

    【解决方案2】:

    将以下内容添加到 ~/.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
    

    【讨论】:

      【解决方案3】:

      我可以通过将以下内容添加到我的 Makefile 来解决此问题:

      CFLAGS="$(OTHER_CFLAGS) -mmacosx-version-min=10.5"
      LDFLAGS="$(OTHER_LDFLAGS) -mmacosx-version-min=10.5"
      

      表面上看,这仅在 Xcode 之外构建时才需要。这个问题让我很沮丧很长时间,我认为在这里分享我的经验会很有用。

      【讨论】:

      • 是的,这也是为我做的。
      【解决方案4】:

      看起来您正在从 /usr/lib 中获取库,这完全不适合 iPhone SDK。我假设您已更改构建设置以将 /usr/lib 添加到库搜索路径。首先这应该是完全没有必要的,因为 /usr/lib 位于编译器的标准搜索路径中,但如果您需要修改这样的搜索路径,请务必使用 $(SDKROOT)/usr/lib

      【讨论】:

      • 我去看看。没有改变任何东西,所以我猜以前是这样的。
      • 作为我的菜鸟,我正在查看项目设置,但没有看到明显需要更改的内容。那里需要一点帮助。
      • 获取项目中每个库的信息。确保它与 SDK 相关。还要仔细检查您是否在项目或目标上设置了库搜索路径设置 - 如果有,请确保它不包括 /usr/lib。
      【解决方案5】:

      将部署目标设置为编译器默认值解决了这个问题。不要更改任何其他内容。

      【讨论】:

        【解决方案6】:

        编译器通常使用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
          

        正如您在上面的示例中看到的,crt1.10.6.o 在 MacOSX10.5 中缺失。

        解决方案 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
        

        【讨论】:

          【解决方案7】:

          在这个上浪费了几个小时......

          有趣的是,对我来说,问题只出在 Simulator-Debug 上。 它没有抱怨 Simulator-Release 或 Device Debug/Release!

          无论如何,将部署目标更改为 10.5 为我解决了这个问题!

          【讨论】:

            【解决方案8】:

            通过将 Mac OS X 部署目标设置为 10.5 并在此之后设置回编译器默认值解决了这个问题 :)

            【讨论】:

              【解决方案9】:

              当我在一台机器上使用 Xcode 4 并在另一台机器上使用 Xcode 3.2.6 时,我遇到了这个问题。这两个版本应该能够在它们之间交换 .xcodeproj 文件,但我发现在 project.pbxproj 文件中(在 .xcodeproj 目录内),仍然有几个地方显示:

              MACOSX_DEPLOYMENT_TARGET = 10.6;

              我退出 Xcode,然后将三个匹配项更改为:

              MACOSX_DEPLOYMENT_TARGET = 10.5;

              重新打开项目后,我可以再次构建。呼!

              【讨论】:

                【解决方案10】:

                我收到了同样的错误信息,以上解决方案都不适合我。我通过删除 xcodeproj 文件中的 *.pbxuser 和 *.mode1v3 文件解决了这个问题。

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

                【讨论】:

                  【解决方案11】:

                  我在 Fortran Makefile 中遇到了同样的问题。 在编译器后添加以下选项(适用于 OSX 10.5):

                  -L/Developer/SDKs/MacOSX10.5.sdk/usr/lib

                  例如,

                  g77 -L/Developer/SDKs/MacOSX10.5.sdk/usr/lib

                  现在编译器会找到你想要的库!

                  【讨论】:

                    【解决方案12】:
                    将以下内容添加到 ~/.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 的作者)的回答,他通过使用符号链接解决了这个特定问题(顺便说一下,有人引用了这个页面),但他指出这不是最好的大大地。

                    【讨论】: