如何在Mac上使用Emscripten emcc和make时包含ncurses

时间:2012-05-26 15:28:59

标签: gcc makefile llvm ncurses emscripten

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

我已设法以

开始流程

emconfigure ./configure 使

开始成功开始生成LLVM bitcode .o文件,但随后它在main-gcu.c上挂起'main-gcu.c:43:11:致命错误:'找不到'ncurses.h'文件'

我相信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的引用。

谢谢!

1 个答案:

答案 0 :(得分:5)

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

  1. 一般规则是 Emscripten ONLY 的所有工具都可以转为 LLVM 格式(例如 BITCODE )进入 JavaScript emconfigureemmake...修改构建环境,以便将源代码编译为 LLVM 格式之一(规则有例外,但永远不要) 。因此,您想要链接到最终结果的任何内容都必须采用LLVM格式(默认情况下 ncurses 不是)。

  2. 由于输出是 JavaScript ,因此无法在不同的线程中执行任何程序代码。虽然很多C / C ++代码确实使用线程用于UI而其他代码用于处理,但这样的模型不为 Emscripten 工作。因此,为了使软件编译/运行,您将不得不重写使用线程的部件。有关指示,请参阅emscripten_set_main_loop

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

  4. 我希望所有的清晰度最终消失;)