我正在尝试使用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的引用。
谢谢!
答案 0 :(得分:5)
我认为您通过 Emscripten 误解了编译。我将试着指出你面临的一些问题。
一般规则是 Emscripten ONLY 的所有工具都可以转为 LLVM 格式(例如 BITCODE )进入 JavaScript 。 emconfigure
,emmake
,...
修改构建环境,以便将源代码编译为 LLVM 格式之一(规则有例外,但永远不要) 。因此,您想要链接到最终结果的任何内容都必须采用LLVM格式(默认情况下 ncurses 不是)。
由于输出是 JavaScript ,因此无法在不同的线程中执行任何程序代码。虽然很多C / C ++代码确实使用线程用于UI而其他代码用于处理,但这样的模型不为 Emscripten 工作。因此,为了使软件编译/运行,您将不得不重写使用线程的部件。有关指示,请参阅emscripten_set_main_loop
。
即使您已编译了库,也必须静态将它们链接到 Emscripten 。在这一点上,它不是一个技术问题,而是更多的许可证问题,因为如果你的图书馆在 LGPL 由于静态链接 GPL 条款有效。
我希望所有的清晰度最终消失;)