迁移到xcode5后找不到stdio.h

时间:2013-10-18 11:39:07

标签: ios objective-c c build-process xcode5

我有一个基于c / c ++文件的iOS项目。到目前为止,我正在研究X代码4.6.3。最近我遇到了与录音有关的错误。建议的解决方案是转到x代码5.并修复它。

当我升级到x代码时5.突然项目开始出错,说找不到“stdio.h”。

我尝试再次删除和安装X代码,正如许多帖子中所建议的那样。它仍然会出现同样的错误。

检查是否已安装命令行工具。 X代码每次我再次下载时都会安装它。

我还试图摆弄Apple LLVM 5.0自定义编译器标志,语言,语言C ++,语言模块,语言 - 目标C的Xcode Build设置。 因为这是一个基本的头文件。我假设我错过了一些非常微不足道的东西。

问题:在为iOS编译时,我在哪里可以找到stdio.h?或者我应该用什么标题代替stdio.h以确保我的程序编译?

2 个答案:

答案 0 :(得分:0)

您是否在新安装的X代码的组件内的首选项中安装了命令行工具?如果没有,那么请点击安装按钮。 然后尝试运行此命令: -

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/

答案 1 :(得分:0)

因此,Apple包括<stdlib.h><stdio.h>和朋友。您必须确保标题在路径上。您可以找到一系列要使用的<stdlib.h>以及find的相应路径:

$ find /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer -name stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/include/c++/4.2.1/tr1/stdio.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/include/stdio.h

以下两种方法可以确保标题在路径上。首先(首选方式)是使用--sysroot。使用--sysroot可确保标题 库都在路径上,因此您不需要其他编译器选项(例如-I, - Ll等):

CC=export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CFLAGS="-Wall -Wextra -Wconversion -arch armv7 -arch armv7s \
    --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk""

然后,你会像这样使用它:

$(CC) $(CFLAGS) -c foo.c -o foo.o

第二种方法是只包含标题,但是你会遇到类似的痛点:

CC=export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CFLAGS="-Wall -Wextra -Wconversion -arch armv7 -arch armv7s \
    -I="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include""

你仍然会这样使用它:

$(CC) $(CFLAGS) -c foo.c -o foo.o

在我的情况下,我没有使用&#34;没有这样的文件或目录&#34;错误。但是 不是 没有这样的文件<stdio.h>(这就是我所读到的)。相反,我使用键盘保存了一个文件: CTRL + S 错过了 CTRL ,因此我的--sysroot拼写错误。它使用sdks(额外s的多个会费)而不是sdk(单数)。所以SYSROOT目录不正确。

由于误导,我开始获得赏金......