如何在Windows10 x86-64 MinGW环境下用SDL编译目标DLL?
解决MinGW编译libksnd DLL时
lib: No such file or directory错误的方法 错误原因
你碰到的lib是Visual Studio专属的库管理工具,MinGW环境里根本没有这个命令——MinGW对应静态库操作的工具是ar,生成DLL导入库用的是dlltool。项目的Makefile里硬编码调用了VS的lib,所以MinGW找不到它才报这个错。
具体修复步骤
1. 修改Makefile替换lib命令
打开项目的Makefile,定位到报错的第117、127行附近的命令,把lib调用换成MinGW兼容的工具:
- 生成静态库(
libksndstatic.a):
原命令如果类似lib /OUT:bin.release/libksndstatic.a [目标文件列表],改成:ar rcs bin.release/libksndstatic.a [目标文件列表] - 生成DLL的导入库(
ksnd.lib):
如果项目有ksnd.def定义文件,替换成:
或者更省事的方式:直接在链接DLL时让gcc自动生成导入库,把链接命令改成:dlltool -d ksnd.def -l bin.release/ksnd.lib
这样能跳过单独调用gcc -shared -o bin.release/ksnd.dll [目标文件列表] -Wl,--out-implib=bin.release/ksnd.lib -lSDL2lib或dlltool的步骤。
2. 确认SDL链接配置
既然项目作为子模块能在同一环境编译,说明你的SDL路径配置没问题,但还是要确保Makefile里SDL的链接参数正确:
- 头文件路径:
-I[你的SDL安装目录]/include - 库文件路径和链接:
-L[你的SDL安装目录]/lib -lSDL2(如果是SDL1.2就改成-lSDL)
3. 重新编译
执行以下命令清理旧文件并重新编译:
make clean make
关于lib工具的疑惑
lib是Visual Studio自带的工具,用来创建、修改静态库和DLL导入库;MinGW下没有这个工具,对应的替代是:
- 静态库管理:
ar(比如用ar rcs创建静态库) - DLL导入库生成:
dlltool或gcc链接时通过--out-implib参数自动生成
内容的提问来源于stack exchange,提问作者LTVA
相关产品推荐
相关产品推荐

