我提请您注意我几天解决的问题,没有任何问题可以为我解决,希望可以节省其他人的时间。
我尝试从macOS Catalina(10.15)上的源代码编译LLVM。
为此,我使用了以下命令(在遵循LLVM构建手册之后):
git clone https://github.com/llvm/llvm-project
cd llvm-project
mkdir build && cd build
cmake -G "Ninja" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DCMAKE_BUILD_TYPE="Debug" ../llvm
ninja
现在,您应该在build / bin下有一个可用的clang编译器。但是,给出/tmp/program.c
以下内容:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
我得到以下输出:
/tmp/program.c:1:10:致命错误:找不到'stdio.h'文件 #include <stdio.h> ^ ~~~~~~~~ 产生1个错误.``` 我尝试了很多解决方案,包括设置“ CPATH”,“ CFLAGS”,“ CXXFLAGS”,“ LDFLAGS”等,但均无效。
从macOS Catalina开始,该/usr
文件夹被挂载为只读目录,因此即使是root用户也没有人可以修改该文件夹(当然,除非您以SIP模式重启,这显然不是一个不错的解决方案)。整个工具链默认保存在下/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
。您可以通过执行来获取路径xcrun --show-sdk-path
。我假设您的答案中确实有默认路径,但是请根据需要进行调整。
运行clang
与-v
标志给了我的情况如下:
./clang /tmp/program.c -v --
clang version 11.0.0 (https://github.com/llvm/llvm-project 01641197ee0bd3895c756c925723c8c8e03bcb09)
Target: x86_64-apple-darwin19.5.0
Thread model: posix
InstalledDir: ~/llvm/llvm-project/build/bin/.
"~/llvm/llvm-project/build/bin/clang-11" -cc1 -triple x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -main-file-name program.c -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fno-rounding-math -munwind-tables -fcompatibility-qualified-id-block-type-checking -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -target-linker-version 556.6 -v -resource-dir ~/llvm/llvm-project/build/lib/clang/11.0.0 -internal-isystem /usr/local/include -internal-isystem ~/llvm/llvm-project/build/lib/clang/11.0.0/include -internal-externc-isystem /usr/include -fdebug-compilation-dir ~/llvm/llvm-project/build/bin -ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fmax-type-align=16 -fcolor-diagnostics -o /var/folders/64/6bf82c_52ws1n4cwc376znvr0000gn/T/program-d111a4.o -x c /tmp/program.c
clang -cc1 version 11.0.0 based upon LLVM 11.0.0git default target x86_64-apple-darwin19.5.0
ignoring nonexistent directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
~/llvm/llvm-project/build/lib/clang/11.0.0/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
/tmp/program.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
^~~~~~~~~
1 error generated.
可以告诉我们,系统标头的包含路径为:
/usr/local/include
~/llvm/llvm-project/build/lib/clang/11.0.0/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
因此,我们可以看到新标题(/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
)的位置没有出现在此处,因此出现了错误。
我们可以做从/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
到的符号链接/usr/local/include
,但是这样做会产生冲突的标题,并产生不良的副作用(是的,我尝试过。是的,这非常愚蠢……)。
我们可以看到默认搜索头路径之一出现在构建目录(~/llvm/llvm-project/build/lib/clang/11.0.0/include
)下。将标准标头符号链接到该目录不会造成任何危险的冲突。
因此,解决此问题所需要做的就是:
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/* ~/llvm/llvm-project/build/lib/clang/11.0
我希望我的回答可以帮助其他在这个问题上苦苦挣扎的人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句