gok*_*oki 2 c++ macos sdk xcode clang
我在 MacOS 上从头开始构建 Clang,但我遇到了问题。
使用以下配置 Clang 进行构建:
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/opt/clang-12 -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86" -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;lldb" ../llvm
Run Code Online (Sandbox Code Playgroud)
这是我的测试程序:
#include <ostream>
#include <algorithm>
int main(int argc, char** argv) {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果使用 XCode 附带的 Clang 11.0.3 编译,则可以 clang++ -c test.cc
如果使用新的 Clang 12(内置),则出错 /opt/clang-12/bin/clang++ -c test.cc
In file included from test.cc:2:
In file included from /opt/clang-12/bin/../include/c++/v1/ostream:138:
In file included from /opt/clang-12/bin/../include/c++/v1/ios:214:
In file included from /opt/clang-12/bin/../include/c++/v1/iosfwd:95:
/opt/clang-12/bin/../include/c++/v1/wchar.h:119:15: fatal error: 'wchar.h' file not found
#include_next <wchar.h>
^~~~~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)
根据我尝试包含的内容,我会收到不同的包含错误。
? tests /opt/clang-12/bin/clang++ -v -c test.cc
clang version 12.0.0 (https://github.com/llvm/llvm-project.git b529c5270c99e0ca18e3cbd9a5f50eb0970e560a)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /opt/clang-12/bin
(in-process)
"/opt/clang-12/bin/clang-12" -cc1 -triple x86_64-apple-macosx10.15.0 -Wundef-prefix=TARGET_OS_ -Werror=undef-prefix -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all --mrelax-relocations -disable-free -disable-llvm-verifier -discard-value-names -main-file-name test.cc -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fno-rounding-math -munwind-tables -fcompatibility-qualified-id-block-type-checking -target-cpu penryn -debugger-tuning=lldb -target-linker-version 556.6 -v -resource-dir /opt/clang-12/lib/clang/12.0.0 -stdlib=libc++ -internal-isystem /opt/clang-12/bin/../include/c++/v1 -internal-isystem /usr/include/c++/v1 -internal-isystem /usr/local/include -internal-isystem /opt/clang-12/lib/clang/12.0.0/include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /Users/duddie/Projects/Audio/1voct/1voct_modular/tests -ferror-limit 19 -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fmax-type-align=16 -fcolor-diagnostics -o test.o -x c++ test.cc
clang -cc1 version 12.0.0 based upon LLVM 12.0.0git default target x86_64-apple-darwin19.6.0
ignoring nonexistent directory "/usr/include/c++/v1"
ignoring nonexistent directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/opt/clang-12/bin/../include/c++/v1
/usr/local/include
/opt/clang-12/lib/clang/12.0.0/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
In file included from test.cc:2:
In file included from /opt/clang-12/bin/../include/c++/v1/ostream:138:
In file included from /opt/clang-12/bin/../include/c++/v1/ios:214:
In file included from /opt/clang-12/bin/../include/c++/v1/iosfwd:95:
/opt/clang-12/bin/../include/c++/v1/wchar.h:119:15: fatal error: 'wchar.h' file not found
#include_next <wchar.h>
^~~~~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)
clang++ -target arm-none-eabi -c test.cc
test.cc:2:10: fatal error: 'ostream' file not found
#include <ostream>
^~~~~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)
任何想法我做错了什么?
小智 8
将以下内容添加到 shell 配置文件~/.bash_profile
或~/.zsh_profile
任何其他方式来设置您正在运行它的 shell 可访问的环境变量。
export SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk"
Run Code Online (Sandbox Code Playgroud)
在您的 macOS/Xcode 版本上验证 SDK 的正确路径。
重新打开终端(获取文件可能无法可靠地工作)。然后再次尝试您的编译命令。
/opt/clang-12/bin/clang++ -c test.cc
Run Code Online (Sandbox Code Playgroud)
命令行工具包在 macOS SDK 中安装 macOS 系统头文件。使用已安装工具编译的软件将在 Xcode 提供的 macOS SDK 中搜索头文件:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
或命令行工具:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
取决于使用 xcode-select 选择哪个。默认情况下,命令行工具会在 SDK 中搜索系统标头。但是,某些软件可能无法针对 SDK 正确构建,并且需要将 macOS 头文件安装在 /usr/include 下的基本系统中。如果您是此类软件的维护者,我们鼓励您更新您的项目以使用 SDK 或针对阻止您这样做的问题提交错误报告。作为一种解决方法,提供了一个额外的包,用于将头文件安装到基本系统。在未来的版本中,将不再提供此包。您可以在以下位置找到此软件包:/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
https://developer.apple.com/documentation/xcode-release-notes/xcode-10-release-notes
可能是一个更便携的(我在llvm-project/llvm/utils/lit/lit/util.py:399找到了提示):
export SDKROOT=$(xcrun --show-sdk-path --sdk macosx)
Run Code Online (Sandbox Code Playgroud)
此外,您还可以-isysroot
向 clang 驱动程序添加参数来更改标头搜索的默认系统根目录:
clang++ a.cpp -isysroot $(xcrun --show-sdk-path --sdk macosx)
Run Code Online (Sandbox Code Playgroud)
更多详细信息和调查说明请参见此处
归档时间: |
|
查看次数: |
1437 次 |
最近记录: |