6

我正在尝试使用 Emscripten 的 emcc 构建一个项目(即 Angband 的源代码 - http://rephial.org/downloads/3.3/angband-v3.3.2.tar.gz),以便将其移植到 Javascript 并最终构建一个在线版本。

我已经设法开始了这个过程

emconfigure ./configure 使

它开始成功开始生成 LLVM 位码 .o 文件,但随后它在 main-gcu.c 上挂起,并显示 'main-gcu.c:43:11: fatal error: 'ncurses.h' file not found'

我相信 main-gcu.c 是唯一引用 ncurses 的文件,但我只是不知道如何在编译时包含该库。有没有办法用'make'指定包含ncurses,或者我应该用'emcc main-gcu.c -c -lncurses'单独编译main-gcu.c文件?我尝试这样做,但这导致了另一个错误,即 emcc 无法找到其他实际包含的头文件向下两层(它找不到 main-gcu.c 包含的头文件所包含的头文件 - 无论如何要解决这个问题? )。

我也不确定我是否已经/需要在 Mac OSX 上安装 ncurses 库。我真正能找到的只是对 Linux 的 libncurses5-dev 的引用。

谢谢!

4

1 回答 1

5

我认为您误解了通过Emscripten进行的编译。我将尝试指出您面临的一些问题。

  1. 一般规则是Emscripten 的所有工具只能将LLVM格式(例如BITCODE)转换JavaScript。, ,修改构建环境,以便将您的源代码编译为其中一种LLVM格式(规则有例外,但没关系)。因此,您想要链接到最终结果的任何内容也必须采用 LLVM 格式(默认情况下ncurses不是)。emconfigureemmake...

  2. 由于输出是JavaScript,因此没有机会在不同的线程中执行任何程序代码。虽然许多 C/C++ 代码确实使用线程进行 UI 和其他处理,但这样的模型不适用于Emscripten。因此,为了让软件编译/运行,您将不得不重写使用线程的部分。请参阅emscripten_set_main_loop指针。

  3. 即使您编译了库,您也必须将它们静态链接到Emscripten。在这一点上,它不是一个技术问题,而是一个许可证问题,因为如果您的库由于静态链接而在例如LGPL下获得许可,则GPL条款是有效的。

我希望所有的清晰度最终都消失了;)

于 2012-06-17T23:25:58.200 回答