编译 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-windows 和 julian-r/file-windows 两个前辈项目后,我将编译器从原本的 Vistual Studio 替换为 MinGW,编译成功。项目发布在 GitHub 上:
tabris17/file-windows: file and libmagic for Windowsgithub.comfile and libmagic for Windows
大家可以在 Releases 页面下载编译好的二进制文件,也可以在本地下载。
压缩包中包含三个文件:
- file.exe
- magic.mgc
- libmagic.dll
动态链接库 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.exe 或 libmagic.dll 存放在同一目录下,以供运行时查询。