Flutter Windows调试模式加载abc.dll失败(错误码193)求助
问题分析与解决方案
是的,你的猜测完全正确,调试版abc.dll依赖预编译的Release版FFmpeg DLL正是导致错误193的原因。
错误原因解析
Windows系统的错误码193(ERROR_BAD_EXE_FORMAT)通常发生在二进制格式不兼容的场景下,这里的核心问题是Debug与Release版本的C/C++运行时库不兼容:
- Debug版本的
abc.dll编译时会链接调试版运行时库(例如MSVC的msvcrtd.dll),这类库包含调试符号、内存检测等专属逻辑; - 你当前使用的
avutil-57.dll、avformat-59.dll是Release版,它们链接的是发布版运行时库(例如MSVC的msvcrt.dll),两者的二进制结构、符号约定存在差异。
当系统加载Debug版abc.dll时,无法协调这种混合依赖的运行时库,最终抛出加载失败的错误。
修复方案
获取/编译FFmpeg的Debug版本库
你需要对应Debug模式的avutil-57d.dll、avformat-59d.dll(通常Debug版库会带d后缀,具体以FFmpeg编译配置为准),确保依赖库与abc.dll的构建模式一致。修改CMake配置区分依赖版本
通过CMake的配置条件判断,让Debug模式链接Debug版FFmpeg库,Release模式链接Release版:add_library( abc SHARED mycode.cpp ) target_link_libraries(abc $<$<CONFIG:Debug>:avutil-57d> $<$<CONFIG:Debug>:avformat-59d> $<$<CONFIG:Release>:avutil-57> $<$<CONFIG:Release>:avformat-59> )同步Debug目录的依赖DLL
在Flutter调试构建时,确保将Debug版的FFmpeg DLL复制到项目的Debug输出目录中,替换现有的Release版DLL,保证所有依赖库的构建模式统一。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

