MacOS Mojave 中的 C 头文件在哪里?
Where are the C headers in MacOS Mojave?
Apple 似乎一直在移动他们的工具,而使用 xcode-select --install
安装命令行工具的旧解决方案不起作用。
在 Mojave 中,xcode-select
不再安装任何东西(GUI 总是找不到包)并且命令行工具不会在 /usr/
或 [=13= 中自行安装].
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
拥有共同的 public headers,例如标准 C headers,而各种 Apple headers 在 System
下的框架中。 =18=]
在 /Applications/Xcode.app/Contents/Developer/Platforms
中,您可能会找到其他平台的文件夹,例如 iPhoneOS.platform
和 AppleTVOS.platform
。其中,Developer/SDKs
导致这些平台的 SDK。
xcode-select --install
在莫哈韦沙漠为我工作。也许您可以尝试从 Mac App Store 安装 XCode,然后安装开发者工具?
关于 header 个位置,我在 /Library/Developer/CommandLineTools/
中有 header 个苹果:
$ 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
如果你通过 brew 安装 gcc,它会在 /usr/local/
:
中添加 headers
$ 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
(这些不是 Apple 的 header,而是 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[=12=]", 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[=12=]", 0x1000000, 0x1A) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/lib/clang/10.0.0/include/stdio.h[=12=]", 0x1000000, 0x48) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/include/stdio.h[=12=]", 0x1000000, 0x37) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h[=12=]", 0x1000000, 0x47) = 3 0
这将安装 headers:
打开 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Apple 似乎一直在移动他们的工具,而使用 xcode-select --install
安装命令行工具的旧解决方案不起作用。
在 Mojave 中,xcode-select
不再安装任何东西(GUI 总是找不到包)并且命令行工具不会在 /usr/
或 [=13= 中自行安装].
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
拥有共同的 public headers,例如标准 C headers,而各种 Apple headers 在 System
下的框架中。 =18=]
在 /Applications/Xcode.app/Contents/Developer/Platforms
中,您可能会找到其他平台的文件夹,例如 iPhoneOS.platform
和 AppleTVOS.platform
。其中,Developer/SDKs
导致这些平台的 SDK。
xcode-select --install
在莫哈韦沙漠为我工作。也许您可以尝试从 Mac App Store 安装 XCode,然后安装开发者工具?
关于 header 个位置,我在 /Library/Developer/CommandLineTools/
中有 header 个苹果:
$ 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
如果你通过 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
(这些不是 Apple 的 header,而是 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[=12=]", 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[=12=]", 0x1000000, 0x1A) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/lib/clang/10.0.0/include/stdio.h[=12=]", 0x1000000, 0x48) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/include/stdio.h[=12=]", 0x1000000, 0x37) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h[=12=]", 0x1000000, 0x47) = 3 0
这将安装 headers:
打开 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg