Aly*_*hak 5 c++ macos terminal emscripten
我有一个用 cmake 构建的 c++ 项目。它编译和链接很好。目标是使用 Emscripten 从中生成将在浏览器中运行的代码。
从上Emscripten网站上的文档在这里可以发现:
运行前两个命令(emconfigure 和 emmake)后,看似成功,我在任何地方都没有任何 .bc 文件,尽管它实际上确实生成了 .js 和 .wasm 文件。文档暗示 .js 文件只会由执行第三个命令 ./emcc 产生。
在您找到的同一文档页面上再往下一点:
Make 生成链接的 LLVM 位码。它不会在链接期间自动生成 JavaScript,因为所有文件都必须使用相同的优化和编译器选项进行编译——在从 bitcode 到 JavaScript 的最终转换中这样做是有意义的。
所以它似乎应该产生一些位码。这该怎么做?
(我确实按照那些文档的建议使用了 VERBOSE 命令,虽然我没有看到使用 emcc 而不是本机编译器,但正在使用 em++,这似乎与 emcc 大致相同。)
小智 4
当使用 Emscripten 构建系统构建项目时,它总是会生成一个位码文件。这与默认输出文件的文件扩展名无关。它无法生成不同的文件,因为这会使 Make 感到困惑,因为文件不会按照告知的那样创建。在 Emscripten 网站上,页面下方有一条注释,上面写着:
make 的文件输出可能有不同的后缀:.a 表示静态库存档,.so 表示共享库,.o 或 .bc 表示目标文件(这些文件扩展名与 gcc 用于不同类型的文件扩展名相同) 。无论文件扩展名如何,这些文件都包含链接的 LLVM 位代码,emcc 可以在最后一步将其编译为 JavaScript。如果后缀是其他内容 - 例如根本没有后缀,或类似 .so.1 - 那么您可能需要在将文件发送到 emcc 之前重命名该文件。
无论构建要创建什么文件,即使是通常是共享库的文件,也将始终包含位代码,并且可以直接与项目的其余部分链接。
编辑:
我只能假设 .js 输出文件的原因是因为 CMake 项目设置为生成可执行文件。在这种情况下,Emscripten 可能足够聪明来创建 .js,但我不确定。