27

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

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

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

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

4

12 回答 12

15

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

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

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

于 2009-09-03T02:30:41.287 回答
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
于 2009-12-31T11:16:12.167 回答
6

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

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

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

于 2009-10-26T19:51:51.020 回答
3

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

于 2009-09-01T23:58:43.583 回答
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
    

正如您在上面的示例中看到的,crt1.10.6.oMacOSX10.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
于 2013-04-19T10:43:17.117 回答
2

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

于 2011-11-15T09:43:18.537 回答
1

This problem solved by setting Mac OS X Deployment Target to 10.5 and after this set back to Compiler Default :)

于 2011-03-22T09:24:09.267 回答
1

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

  1. 控制/单击 xcode *.xcodeproj 文件
  2. 从菜单中选择“显示包内容”选项
  3. 将打开一个包含内容的窗口
  4. 删除以你的用户名开头的 pbxuser/mode1v3 文件
  5. 重建项目
于 2011-05-04T16:51:18.237 回答
1

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

-L/开发者/SDKs/MacOSX10.5.sdk/usr/lib

例如,

g77 -L/开发者/SDKs/MacOSX10.5.sdk/usr/lib

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

于 2012-03-15T05:55:29.120 回答
1

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

有趣的是,对我来说,问题只出在 Simulator-Debug 上。它没有抱怨模拟器发布或设备调试/发布!

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

于 2009-09-04T08:51:31.663 回答
1

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

MACOSX_DEPLOYMENT_TARGET = 10.6;

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

MACOSX_DEPLOYMENT_TARGET = 10.5;

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

于 2011-03-30T04:49:07.073 回答
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 的作者)的回答,他通过使用符号链接解决了这个特定问题(顺便说一下,有人引用了这个页面),但他指出这不是最好的方法。

于 2010-09-09T16:56:36.433 回答