迁移到 xcode5 后找不到 stdio.h

Posted

技术标签:

【中文标题】迁移到 xcode5 后找不到 stdio.h【英文标题】:stdio.h not found after migrating to xcode5 【发布时间】:2013-10-18 11:39:06 【问题描述】:

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

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

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

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

我还尝试为 Apple LLVM 5.0 Custom Compiler Flags、Language、Language-C++、Language-Modules、Language-Objective C 调整 Xcode Build 设置。 因为这是一个基本的头文件。我假设我错过了一些非常琐碎的事情。

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

【问题讨论】:

感谢您的回复,但不,这不是我检查过的重复问题。 我不是 iOS 开发者,但如果你正在编写 C++ 代码,你是否尝试过使用 代替? 【参考方案1】:

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

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

【讨论】:

嗯,他明确提到安装了命令行工具 Hussain 和 Martin 感谢您的回复,您的回复让我想到了不同的方向,我发现该项目仍然指向 iPhoneOS6.1.sdk。这在 Xcode 5 中不可用。我收到这样的错误“clang:警告:没有这样的 sysroot 目录:'/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk '”我能想到的一个解决方案是获取 iPhoneOS6.1.sdk 并将其粘贴到那里。这使项目工作,但我仍然无法切换到 iPhoneOS7.0.sdk。如果有人对此有任何想法,请告诉我 要解决您的具体问题,我们需要查看您的编译器驱动程序命令。【参考方案2】:

所以,Apple 包括<stdlib.h><stdio.h> 和朋友。您必须确保标题在路径上。您可以使用find 找到要使用的<stdlib.h> 的选择及其各自的路径:

$ 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、-L、@987654330 @等):

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>(这是我读到的)。相反,我使用键盘保存了一个文件:CTRL + S 错过了 CTRL,所以我的--sysroot 拼写错误。它使用了sdks(复数是额外的s)而不是sdk(单数)。所以 SYSROOT 目录不正确。

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

【讨论】:

以上是关于迁移到 xcode5 后找不到 stdio.h的主要内容,如果未能解决你的问题,请参考以下文章

错误:迁移到 AndroidX 后找不到符号导入 com.google.firebase.iid.InstanceIdResult

ClassNotFoundException:在 androidx 迁移后找不到类“android.support.v4.content.FileProvider”

在 Xcode 5 中禁用基本本地化后找不到 MainMenu.xib

PHP 致命错误:在我修复错误 Laravel 迁移后找不到类“App\Providers\ServiceProvider”:唯一键太长,

vc++编程找不到头文件。。。急求解决方法。。

将 React Native 升级到 0.60-RC2 后找不到库“libjsc.so”