1. LLVM 在构建的时候可以选择启用哪些 target ,macOS 的 AppleClang 可能只 enable 了 AArch64 和 X86 ,你自己 build 的 Clang 如果不传 LLVM_TARGETS_TO_BUILD 这个 CMake 选项那就是全部启用,也包括 WebAssembly
2. 苹果的 AppleClang 应该是对 include 和 library path 有一些魔改,你试着编译一个没有#include 的 C 文件然后-v 看就能发现。
AppleClang 是这样(以 Xcode Beta 为例):
/usr/local/include
/Applications/
Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/15.0.0/include /Applications/
Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include /Applications/
Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include /Applications/
Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
社区源码编译的 Clang 是这样:
/usr/local/include
~/Developer/llvm/build/lib/clang/17/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
最简单的解决方法自然是把 Xcode 里那堆目录软链接到/usr/local/include 里。
继续尝试编译,发现提示-lSystem 找不到,跟着上面 Xcode Clang 的输出,加上-Wl,-syslibroot /Applications/
Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk 就可以。
嫌麻烦也可以把这个额外选项写到 Clang 的 config file 里:
https://clang.llvm.org/docs/UsersManual.html#configuration-files