MacOS Mojave中的C标头在哪里?

Mat*_*her 5 c macos xcode header-files macos-mojave

苹果似乎一直在移动他们的工具,并且使用命令行工具安装的旧解决方案xcode-select --install不起作用。

在Mojave中,xcode-select不再安装任何东西(GUI始终找不到软件包),并且命令行工具也不会在/usr/或中自行安装/usr/local

小智 6

xcode-select --install在莫哈韦沙漠为我工作。也许您可以尝试从Mac App Store安装XCode,然后安装开发人员工具?

关于标题位置,我在/Library/Developer/CommandLineTools/以下位置有Apples标题:

$ sudo find /Library -name stdio.h 
/Library/Developer/CommandLineTools/usr/include/c++/v1/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
Run Code Online (Sandbox Code Playgroud)

如果您通过brew安装gcc,它将在/usr/local/以下位置添加标头:

$ sudo find /usr -name stdio.h 
/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0/tr1/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-apple-darwin17.7.0/8.2.0/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-apple-darwin17.7.0/8.2.0/include-fixed/stdio.h
/usr/local/Cellar/gcc/8.1.0/include/c++/8.1.0/tr1/stdio.h
/usr/local/Cellar/gcc/8.1.0/lib/gcc/8/gcc/x86_64-apple-darwin17.5.0/8.1.0/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.1.0/lib/gcc/8/gcc/x86_64-apple-darwin17.5.0/8.1.0/include-fixed/stdio.h
/usr/local/Cellar/gcc/7.3.0_1/include/c++/7.3.0/tr1/stdio.h
/usr/local/Cellar/gcc/7.3.0_1/lib/gcc/7/gcc/x86_64-apple-darwin17.3.0/7.3.0/include/ssp/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/include/c++/7.3.0/tr1/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/lib/gcc/7/gcc/x86_64-apple-darwin17.5.0/7.3.0/include/ssp/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/lib/gcc/7/gcc/x86_64-apple-darwin17.5.0/7.3.0/include-fixed/stdio.h
/usr/local/include/c++/8.2.0/tr1/stdio.h
/usr/local/lib/gcc/8/gcc/x86_64-apple-darwin17.7.0/8.2.0/include/ssp/stdio.h
/usr/local/lib/gcc/8/gcc/x86_64-apple-darwin17.7.0/8.2.0/include-fixed/stdio.h
Run Code Online (Sandbox Code Playgroud)

(这些不是Apple的标头,而是GCC / GLIBC)。

使用dtruss,我可以看到Apple clang在其中使用了一个CommandLineTools/SDKs

$ sudo dtruss -f sudo -u $USER clang test.c -o test 2>&1
3781/0x51d8:  pread(0x3, "#include <stdio.h>\n\nint main(void)\n{\n  printf(\"Hello, world\\n\");\n  return 0;\n}\n\0", 0x4F, 0x0)              = 79 0
3781/0x51d8:  __pthread_sigmask(0x3, 0x7FFEE3A7E768, 0x7FFEE3A7E76C)            = 0 0
3781/0x51d8:  close(0x3)                = 0 0
3781/0x51d8:  __pthread_sigmask(0x3, 0x7FFEE3A7E76C, 0x0)               = 0 0
3781/0x51d8:  open("/usr/local/include/stdio.h\0", 0x1000000, 0x1A)             = -1 Err#2
3781/0x51d8:  open("/Library/Developer/CommandLineTools/usr/lib/clang/10.0.0/include/stdio.h\0", 0x1000000, 0x48)               = -1 Err#2
3781/0x51d8:  open("/Library/Developer/CommandLineTools/usr/include/stdio.h\0", 0x1000000, 0x37)                = -1 Err#2
3781/0x51d8:  open("/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h\0", 0x1000000, 0x47)                = 3 0
Run Code Online (Sandbox Code Playgroud)


小智 6

根据以下文章:https : //silvae86.github.io/sysadmin/mac/osx/mojave/beta/libxml2/2018/07/05/fixing-missing-headers-for-homebrew-in-mac-osx-mojave /

这将安装标题:

打开/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

  • 该文件不再存在。 (2认同)

Eri*_*hil 5

Xcode 现在支持多个 SDK 和多个 Xcode 安装。SDK 位于 Xcode.app 中,Xcode.app 默认安装在应用程序中,但也可能在其他地方。

xcrun --show-sdk-path将显示默认 SDK 路径,但可能还有其他路径。例如,一种可能的路径是/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk。从那里开始,usr/include包含常见的公共头文件,例如标准 C 头文件,并且各种 Apple 头文件都在System.

在 中/Applications/Xcode.app/Contents/Developer/Platforms,您可能会找到其他平台的文件夹,例如iPhoneOS.platformAppleTVOS.platform。其中,Developer/SDKs导致这些平台的 SDK。