我正在尝试构建一个项目(即 Angband 的源代码 -http://rephial.org/downloads/3.3/angband-v3.3.2.tar.gz http://rephial.org/downloads/3.3/angband-v3.3.2.tar.gz)与 Emscripten 的 emcc 一起使用,以便将其移植到 Javascript 并最终构建在线版本。
我已经成功地开始了这个过程
emconfigure ./configure
制作
它开始成功开始生成 LLVM 位码 .o 文件,但随后它挂在 main-gcu.c 上,并显示“main-gcu.c:43:11: fatal error: 'ncurses.h' file not find”
我相信 main-gcu.c 是唯一引用 ncurses 的文件,但我只是不知道如何在编译时包含该库。有没有办法指定包含 ncurses 与 'make',或者我应该使用 'emcc main-gcu.c -c -lncurses' 单独编译 main-gcu.c 文件?我尝试这样做,但这导致了另一个错误,emcc 无法找到其他实际包含的头文件(它无法找到 main-gcu.c 包含的头文件中包含的头文件 - 无论如何要解决这个问题吗? )。
我也不确定是否有/需要在 Mac OSX 上安装 ncurses 库。我真正能找到的只是对 Linux 的 libncurses5-dev 的引用。
Thanks!
我认为你误解了编译埃姆脚本。我将尝试指出您面临的一些问题。
一般规则是所有工具埃姆脚本 ONLY可以转动LLVM formats (e.g. BITCODE) into JavaScript. emconfigure
, emmake
, ...
修改构建环境,以便将源代码编译为以下之一LLVM格式(该规则有例外,但没关系)。因此,您想要链接到最终结果的任何内容也必须采用 LLVM 格式(默认情况下ncurses不是)。
由于输出是JavaScript,没有机会在不同的线程中执行任何程序代码。虽然许多 C/C++ 代码确实使用线程用于 UI 并使用其他线程进行处理,但这样的模型确实NOT为。。。工作埃姆脚本。因此,为了使软件编译/运行,您必须重写使用线程的部分。看emscripten_set_main_loop
供指点。
即使您已经编译了库,您也必须静态地将它们链接到埃姆脚本。在这一点上,这不再是一个技术问题,而是更多的一个许可证问题,因为如果您的库获得了许可,例如LGPL由于静态链接GPL条款有效。
我希望所有的清晰度最终都消失了;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)