2

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

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

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

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

我还尝试为 Apple LLVM 5.0 Custom Compiler Flags、Language、Language-C++、Language-Modules、Language-Objective C 设置 Xcode Build 设置。因为这是一个基本的头文件。我假设我错过了一些非常微不足道的东西。

问题stdio.h:为 iOS 编译时在哪里可以找到?或者我应该使用什么头文件stdio.h来确保我的程序编译?

4

2 回答 2

0

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

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/
于 2013-10-18T11:58:22.893 回答
0

所以,苹果包括<stdlib.h><stdio.h>和朋友。您必须确保标题在路径上。您可以通过以下方式找到一系列<stdlib.h>要使用的 's 及其各自的路径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

就我而言,我因“没有这样的文件或目录”错误而失败。但它不是没有这样的文件<stdio.h>(这是我读到的)。相反,我使用键盘保存了一个文件:aCTRL + S错过了CTRL,所以 my--sysroot拼写错误。它使用sdks(复数会费额外的s)而不是sdk(单数)。所以 SYSROOT 目录不正确。

由于拼写错误,我开始了赏金......

于 2015-01-11T01:49:32.870 回答