gpt4 book ai didi

c++ - 如何使用 emscripten 和 cmake 项目生成位码(.bc 文件)?

转载 作者:行者123 更新时间:2023-12-02 03:28:48 26 4
gpt4 key购买 nike

我有一个用 cmake 构建的 C++ 项目。它可以很好地编译和链接。目标是使用 Emscripten 生成将在浏览器中运行的代码。

摘自 Emscripten 网站上的文档 here发现:

enter image description here

运行前两个命令(emconfigure 和 emmake)后,看似成功,但我在任何地方都没有任何 .bc 文件,尽管它实际上确实生成了 .js 和 .wasm 文件。文档暗示 .js 文件只能由执行第三个命令 ./emcc 产生。

在同一文档页面上再往下一点,您会发现:

Make generates linked LLVM bitcode. It does not automatically generate JavaScript during linking because all the files must be compiled using the same optimizations and compiler options — and it makes sense to do this in the final conversion from bitcode to JavaScript.

所以看起来它应该产生一些位码。如何做到这一点?

(我确实按照这些文档的建议使用了 VERBOSE 命令,虽然我没有看到使用 emcc 来代替 native 编译器,但正在使用 em++,这似乎与 emcc 基本相同。)

最佳答案

当使用 Emscripten 构建系统构建项目时,它始终会生成一个位码文件。这与默认输出文件的文件扩展名无关。它无法生成不同的文件,因为这会使 Make 感到困惑,因为文件不会按照告知的那样创建。 At the Emscripten website页面下方有一条注释,上面写着:

The file output from make might have a different suffix: .a for a static library archive, .so for a shared library, .o or .bc for object files (these file extensions are the same as gcc would use for the different types). Irrespective of the file extension, these files contain linked LLVM bitcode that emcc can compile into JavaScript in the final step. If the suffix is something else - like no suffix at all, or something like .so.1 - then you may need to rename the file before sending it to emcc.

无论构建要创建什么文件,即使是通常是共享库的文件,也将始终包含位代码,并且可以直接与项目的其余部分链接。

编辑:
我只能假设 .js 输出文件的原因是 CMake 项目设置为生成可执行文件。在这种情况下,Emscripten 可能足够聪明来创建 .js,但我不确定。

关于c++ - 如何使用 emscripten 和 cmake 项目生成位码(.bc 文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59186451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com