如何使用 emcc 和项目符号库从 cpp 文件编译 link .bc 文件?

How to link .bc files compiled from cpp files using emcc, with bullet libraries?

根据 ammo.js 的文档,它说:

The most straightforward thing is if you want to write your code in C++, and run that on the web. If so, then compile your code into LLVM, link it with bullet, and compile that to JavaScript using emscripten.(The easiest way to link it is to add your .bc file to the llvm-link command in make.py.)

那么如何将以下用 C++ 编写的代码编译成 LLVM 位码,link 它和 运行 它在网络上? BulletHelloWorld example

我怎样才能 link 它在 make.py 中?即使我想编译特定程序并且不想将整个项目符号库暴露给 JavaScript,是否有必要始终使用 ammo.idl 文件? Link to make.py

所以让我们从基础开始。如果您不知道 make 和 cmake,请在继续之前研究它。

首先您需要从源代码构建 Bullet Library 才能在 Web 上使用它。据我所知,您需要传入标志以独立于 python 构建它。研究这些标志,看看你需要什么。

Bullet Library 使用 cmake 生成构建文件 - 因此首先从 cmake 中获取 makefile,然后您可以“emcc make”生成的 makefile。

这一步的输出,即 .bc 文件,将“链接”到下一步的输出。

现在你要编译的example.cpp依赖于Bullet Library的一些headers。因此,在编译 main.cpp 文件时,您需要将 em++ 二进制文件传递给这些 headers 的路径。这一次编译应该生成你的 main.bc

现在您需要再次调用 em++,但使用 main.bc 以及上一步中的 .bc 作为参数,并提供所需的输出文件,即 js/html。从某种意义上说,我们现在正在链接所有“.bc”文件以生成 js/html.

注意一些缺失的符号“警告”,因为这可能意味着您的代码不会 运行。

顺便说一句,所有这些都可以在官方 emscripten 网站上找到,所以如果您感到困惑,请参考它。