刚刚升级到 Snow Leopard,安装了 Xcode 3.2,然后安装了 iPhone SDK 3 for SL。
在一个项目中,我现在在构建时收到以下错误:
ld
: 找不到库-lcrt1.10.6.o
我在网上搜索过,但找不到任何有用的东西。
刚刚升级到 Snow Leopard,安装了 Xcode 3.2,然后安装了 iPhone SDK 3 for SL。
在一个项目中,我现在在构建时收到以下错误:
ld
: 找不到库-lcrt1.10.6.o
我在网上搜索过,但找不到任何有用的东西。
编辑项目设置 -> 在构建选项卡中 -> 对于 Mac OS X 部署目标,将其更改为 XCode 3 的 10.5(即使在 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
正如您在上面的示例中看到的,crt1.10.6.o
MacOSX10.5 缺少。
您可以通过创建指向其他环境的丢失文件的链接来解决该问题,或者您可以更改部署目标。例如
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
将部署目标设置为编译器默认值解决了这个问题。不要改变其他任何东西。
This problem solved by setting Mac OS X Deployment Target to 10.5 and after this set back to Compiler Default :)
我有同样的错误信息,以上解决方案都不适合我。我通过删除 xcodeproj 文件中的 *.pbxuser 和 *.mode1v3 文件解决了这个问题。
我在 Fortran Makefile 中遇到了同样的问题。在编译器之后添加了以下选项(对于 OSX 10.5):
-L/开发者/SDKs/MacOSX10.5.sdk/usr/lib
例如,
g77 -L/开发者/SDKs/MacOSX10.5.sdk/usr/lib
现在编译器会找到你想要的库!
在这个上浪费了几个小时......
有趣的是,对我来说,问题只出在 Simulator-Debug 上。它没有抱怨模拟器发布或设备调试/发布!
无论如何,将部署目标更改为 10.5 为我解决了这个问题!!
当我在一台机器上使用 Xcode 4 并在另一台机器上使用 Xcode 3.2.6 时,我遇到了这个问题。这两个版本应该能够在它们之间交换 .xcodeproj 文件,但我发现在 project.pbxproj 文件(在 .xcodeproj 目录内)中,仍然有几个地方显示:
MACOSX_DEPLOYMENT_TARGET = 10.6;
我退出了 Xcode,然后将三个匹配项更改为:
MACOSX_DEPLOYMENT_TARGET = 10.5;
重新打开项目后,我可以再次构建。哇!
将以下内容添加到 ~/.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 的作者)的回答,他通过使用符号链接解决了这个特定问题(顺便说一下,有人引用了这个页面),但他指出这不是最好的方法。