返回
Featured image of post Mingw编译sl小火车

Mingw编译sl小火车

sl命令

SL (Steam Locomotive) runs across your terminal when you type “sl” as you meant to type “ls”. It’s just a joke command, and not useful at all.

这是它github仓库内的的描述。sl就是一个开玩笑的命令,当你把ls命令输错成sl,终端就会跑过一个蒸汽小火车。

这本来是一个linux终端的命令,之前玩linux的时候特喜欢这个命令。我昨天逛github的时候突然看到这个的源码,发现是c的代码,而且很简单,只有一个c文件和一个h头文件。再加上我这些天配置好了mingw,就很想尝试着把它编译成Windows二进制文件。

过程

尝试直接make

在终端输入mingw32-make,编译出错,报错信息为缺少curses.h头文件。百度了一下,说这个玩意儿是linux平台的东西,不能跨平台。至此,陷入僵局。

交叉编译

想了一下,能不能交叉编译。即在linux上安装mingw,然后去执行mingw32-make。linux一般都有curses.h,所以我猜测应该是可行的。but问题来了,我手头没有linux环境🤨我想到了github的code space(应该是叫这个名字),打开之后发现,它限制安装mingw的环境,不,应该是说它就不允许安装新的内容进去(通过包管理器)。此路不通(其实还有别的方法,但是都太麻烦了)

ncurse

柳暗花明又一村。找到了一篇文章在Ubuntu用ncurses库写个文件,编译出能用于Windows的可执行文件,这篇文章提到,有Windows版本的ncurses,只要链接到这个库就可以编译为exe了。

说干就干,下载下来,开始编译。but,我不会写makefile,😕问题不大,直接gcc开干。模仿文章中的命令,顺利编译成功了。但是~,md又双叒叕出问题了,运行报错,缺少libncursesw6.dll。这个文件在ncurse的bin目录里,拿出来放在exe同级目录里,成功运行。

拖着个dll运行,总感觉不爽。查了一下,可以使用-static参数静态链接。路途多艰,又遇到了一个问题,明明dll文件就在目录下面,编译器报错找不到dll,哪怕是给定路径,依旧不行。

卖糕的,就这样吧,能跑就ok吧,🤦‍♂️ 累了。看看成品

小火车呜呜呜
小火车呜呜呜