xcrun gcc找不到头文件

时间:2012-08-07 03:49:23

标签: xcode gcc header-files osx-mountain-lion xcrun

我想在OSX山狮中编译一个c文件。在Xcode 4.4中,首选项 - >下载我可以安装命令行工具来做到这一点。但是在那个窗格上,它告诉我我可以使用xcrun:

  

在安装之前,请注意,在终端内,您可以使用XCRUN工具启动嵌入在Xcode应用程序中的编译器和其他工具。使用XCODE-SELECT工具定义哪个版本的Xcode处于活动状态。在终端内输入“man xcrun”以了解更多信息。

我很乐意这样做,但是我无法找到stdio.h。

$ xcrun gcc hello.c
hello.c:1:19: error: stdio.h: No such file or directory

在通过App Store标准安装Xcode之后,我的系统上肯定有这个文件: /Applications/Xcode.app/Contents/Developer//Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/stdio.h

我尝试指定SDK但得到了同样的错误:

$ xcrun -sdk /Applications/Xcode.app/Contents/Developer//Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk gcc hello.c

一些谷歌搜索让我尝试在上面的命令之前运行xcode-select,但没有运气。我只安装了一个版本的Xcode。

$ sudo xcode-select -switch /Applications/Xcode.app

如何才能找到标题?

最终我放弃并安装了命令行工具,但知道如何使用内置的Xcode工具会很好。

注意:这是我试图编译的文件:

#include <stdio.h>

int main() {
    printf("hello world!\n");
    return 0;
}

3 个答案:

答案 0 :(得分:4)

您必须为编译器指定非标准sysroot。

使用clang / llvm(这是新标准),这可以解决问题:

xcrun clang --sysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/ -o hello hello.c 

如果您想坚持使用gcc,只需将“clang”替换为“gcc”。

答案 1 :(得分:2)

可能没有任何直接帮助,但您可以为常用的xcrun命令设置别名,以便在其他进程调用gcode,make,gdb,git等时使用Xcode版本:

    alias gcc='xcrun gcc'

如果您愿意,可以将别名放入.bashrc文件中,以便它可以保留,并根据需要从.bash_profile获取。

所有这一切的优点是您不需要安装Xcode命令行工具,也可以避免使用包管理器,节省空间,降低复杂性并利用Xcode自动为您更新这些工具。

答案 2 :(得分:1)

使用xcrun --sysroot对我来说不适合使用10.8。 查看clang文档,我发现-isysroot是在这种情况下使用的选项。

使用:

xcrun gcc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk

或:

xcrun clang -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk

对我来说,创建以下别名非常有用:

alias xcrungcc='xcrun gcc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk'
alias xcrunclang='xcrun clang -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk'