Int*_*nex 4 gcc makefile ncurses llvm emscripten
我正在尝试使用Emscripten的emcc 构建一个项目(即Angband的源代码 - http://rephial.org/downloads/3.3/angband-v3.3.2.tar.gz),以便将其移植到Javascript并最终构建一个在线版.
我已经设法让这个过程开始了
emconfigure ./configure make
它开始成功开始生成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的引用.
谢谢!
我认为你通过Emscripten误解了编译.我将试着指出你面临的一些问题.
一般规则是Emscripten ONLY的所有工具都可以将LLVM格式(例如BITCODE)转换为JavaScript.emconfigure,emmake,...修改生成环境,使您的源代码被编译成的一个LLVM格式(也有例外的规则,但没关系).因此,您想要链接到最终结果的任何内容都必须采用LLVM格式(默认情况下ncurses不是).
由于输出是JavaScript,因此没有机会在不同的线程中执行任何程序代码.虽然很多C/C++代码,并使用一个线程的用户界面和其他人进行处理,这样的模式也不要对工作Emscripten.因此,为了使软件编译/运行,您将不得不重写使用线程的部件.请参阅emscripten_set_main_loop指针.
即使您编译了库,也必须将它们静态链接到Emscripten.此时,它不是技术问题,而是更多的许可证问题,因为如果您的库由于静态链接而在LGPL下获得许可,则GPL条款是有效的.
我希望所有的清晰度最终消失;)