迁移到 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++ 代码,你是否尝试过使用您是否在新安装的 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”:唯一键太长,