【问题标题】:How to link .bc files compiled from cpp files using emcc, with bullet libraries?如何将使用 emcc 从 cpp 文件编译的 .bc 文件与项目符号库链接?
【发布时间】:2017-12-18 21:29:25
【问题描述】:
根据 ammo.js 的文档,它说:
最简单的方法是,如果您想用 C++ 编写代码并在 Web 上运行。如果是这样,则将您的代码编译为 LLVM,将其与项目符号链接,然后使用 emscripten 将其编译为 JavaScript。(链接它的最简单方法是将您的 .bc 文件添加到 make.py 中的 llvm-link 命令。)
那么如何将以下用 C++ 编写的代码编译成 LLVM 位码,链接并在 Web 上运行? BulletHelloWorld example
如何在 make.py 中链接它?即使我想编译特定程序并且不想将整个子弹库暴露给 JavaScript,是否有必要始终使用 ammo.idl 文件?
Link to make.py
【问题讨论】:
标签:
javascript
c++
emscripten
ammo.js
【解决方案1】:
让我们从基础开始。如果您不了解 make 和 cmake,请在继续之前学习它。
首先,您需要从源代码构建子弹库以在网络上使用它。据我所知,您需要传入标志以独立于 python 构建它。研究这些标志,看看你需要什么。
Bullet Library 使用 cmake 生成构建文件 - 所以首先从 cmake 中获取一个 makefile,然后您可以“emcc make”生成的 makefile。
此步骤的输出(即 .bc 文件)将“链接”到下一步的输出。
现在您要编译的 example.cpp 依赖于 Bullet Library 的一些头文件。因此,在编译 main.cpp 文件时,您需要将 em++ 二进制文件传递到这些头文件的路径。这一旦编译应该生成你的 main.bc
现在您需要再次调用 em++,但使用 main.bc 以及上一步中的 .bc 作为参数,并提供所需的输出文件,即 js/html。从某种意义上说,我们现在正在链接所有“.bc”文件以生成 js/html。
注意一些缺失的符号“警告”,因为这可能意味着您的代码无法运行。
顺便说一句,所有这些都可以在官方 emscripten 网站上找到,所以如果您有混淆,请参考它。