使用GCC编译C代码出现undefined reference to `LoadLibraryA@4'错误如何解决
问题排查及解决方法
你遇到的是MinGW链接阶段的配置错误,不是PlaySound函数本身的调用问题,按以下步骤修改即可:
- 删掉你当前构建选项里填写的
winmm.dll:MinGW链接Windows系统库不需要直接关联dll文件,只需要填写库的缩写名即可,正确的填写内容是winmm,链接器会自动查找对应的libwinmm.a导入库完成关联。 - 关闭自定义的stdcall修复类链接选项:你看到的18个警告都是stdcall约定带
@参数字节数后缀的函数,被强制匹配到无后缀的函数名,这类问题通常是你开启了--enable-stdcall-fixup、--kill-at这类非默认链接选项导致的,把这些自定义选项全部删除即可消除警告。 - 补充基础系统库的链接:报错里的
undefined reference to LoadLibraryA@4属于Windows基础kernel32库的导出函数,MinGW默认会自动链接这个库,如果你之前开启了-nodefaultlibs、-nostdlib这类禁用默认库的编译选项,就会触发这个报错。要么删掉这些禁用选项,要么手动在链接库列表里补充添加kernel32。 - 确认构建选项作用范围:很多用户只会修改单个构建配置的参数,比如只改了Release版本的链接库,编译Debug版本的时候依然报错。修改时先选中CodeBlocks构建选项左上角的项目根节点,再修改链接配置,保证配置对所有构建版本生效。
修改完成后重新构建即可正常编译运行,要是不想调整库列表,也可以直接在「其他链接器选项」栏直接填入-lwinmm -lkernel32,效果是一样的。
内容的提问来源于stack exchange,提问作者Samuel Lalawmpuia
相关产品推荐
相关产品推荐

