c++ - 在 Windows 上针对 WebAssembly(--target=wasm64) 的 Clang 找不到 C++ 标头
问题描述
我在 Windows 7 上安装了 clang 11.0.0。我使用 clang++ 编译了一个简单的 helloworld.cpp,没有问题:
clang++ helloworld.cpp -c
现在我的目标是针对 WebAssembly,所以我跑了:
clang++ helloworld.cpp --target=wasm32 -c
这给了我错误“找不到 iostream 文件”。我用详细来查看包含路径有:
忽略不存在的目录“ /include/wasm64-wasi/c++/v1 ”
忽略不存在的目录“ /include/c++/v1 ”
忽略不存在的目录“/include/wasm64-wasi”
忽略不存在的目录“/include”
#include“... " 搜索从这里开始:
#include <...> 搜索从这里开始:
C:\LLVM\lib\clang\11.0.0\include
搜索列表结束。
似乎 clang 正试图在这些 linux 样式下查找可以找到 C++ 标头的路径,但是我使用的是 Windows。
如前所述,它在不针对 wasm 的情况下工作,这意味着 clang 知道在 Windows 风格的 VC++ 包含路径下查看。有没有办法查看 VC++ 包含指定 --target=wasm64 的路径?顺便说一句,我确实安装了 MinGW 并在 PATH 环境变量中。
使用Emscripten,我能够使其工作,因为 Emscripten 在其自己的安装中具有 C++ 标头。但是仍然很好奇是否可以仅使用clang。
解决方案
要像这样编译 hello world,您还需要一组标准头文件和库(也就是通过 --sysroot 指定的 sysroot)。将这些东西捆绑在一起的最简单方法是下载 wasi-sdk ( https://github.com/WebAssembly/wasi-sdk )。
标题还包括--target=wasm64
哪个不是有效的东西,所以现在你想要,--target=wasm32
虽然如果你使用 wasi-sdk clang,无论如何这都是默认的。
推荐阅读
- pyspark - Dataframe pyspark 中的排序
- excel - 如何将此代码用于更多工作表范围(VBA)
- javascript - 自动提交隐藏的 reCAPTCHA 表单不起作用
- patch - 如何使linux内核checkpatch.pl静音错误:缺少签名者:行
- php - MySQL如何优化%LIKE%查询?
- sql - 比较不同 SQL Server 数据库中的相似表
- microsoft-graph-api - 'TimeZoneStandard='microsoft.graph.timeZoneStandard'Iana''' 中位置 57 的语法错误
- java - 以哪种形式在文档末尾添加文档哈希
- android - Android Studio-生成签名的 APK 错误
- reactjs - 如何根据内容调整列的大小 - React Table