编译 libmagic.dll

libmagic 是由 file 命令提供的一个开源库,用于检测文件的类型,最新版本为 5.46,发布于 2024年 11 月。PyPI 上有一个名为 python-magic-bin 的包提供了编译好的 Windows 二进制版本,然而最后一次更新已是 8 年前。Scoop 的 main 仓库中也包含了一个由第三方编译的 file 命令,版本号为 5.45,但没有提供 libmagic 的动态链接库。此外,5.45 的 Magic 文件版本是 19,而 5.46 已经升级到 20,两者不兼容。看来是时候考虑自己编译一个 Windows 版本了。

在参考了 rkitover/file-windowsjulian-r/file-windows 两个前辈项目后,我将编译器从原本的 Vistual Studio 替换为 MinGW,编译成功。项目发布在 GitHub 上:

tabris17/file-windows: file and libmagic for Windowsgithub.comfile and libmagic for Windows

大家可以在 Releases 页面下载编译好的二进制文件,也可以在本地下载

压缩包中包含三个文件:

动态链接库 libmagic.dll 导出如下函数:

getline
magic_open
magic_close
magic_getpath
magic_file
magic_descriptor
magic_buffer
magic_error
magic_setflags
magic_version
magic_load
magic_load_buffers
magic_compile
magic_check
magic_list
magic_errno
magic_setparam
magic_getparam

可执行文件 file.exe 使用静态编译,并不依赖 libmagic.dll 文件,可以单独执行。Magic 数据文件 magic.mgc 需要和 file.exelibmagic.dll 存放在同一目录下,以供运行时查询。