You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter桌面应用调用DLL报错:Failed to load dynamic library 求助

解决Flutter Windows加载DLL失败的问题

一、修正DLL路径问题

Flutter Windows应用调试/运行时的工作目录是项目根目录下的build\windows\runner\Debug(调试模式),你把DLL放在lib/library/windows/里,程序运行时根本找不到该文件。

解决方式:

  • 直接将randomnumber.dll移动到项目的windows\runner\目录下,Flutter编译时会自动将其复制到最终的Debug/Release运行目录;
  • 或者在代码中使用动态路径拼接(需导入dart:io),确保指向正确的DLL位置:
    import 'dart:io';
    import 'package:path/path.dart' as path;
    
    // ...
    String dllPath = path.join(Directory.current.path, 'randomnumber.dll');
    final dyLib = DynamicLibrary.open(dllPath);
    

二、确保DLL是适配Windows的正确版本

  • 必须编译x64架构的DLL:Flutter Windows默认编译x64程序,32位DLL无法被加载;
  • 使用Windows平台编译器编译:比如MSVC、MinGW-w64,不能用Linux/macOS编译器交叉编译(除非明确指定x64目标架构);
  • 验证DLL有效性:用Windows自带的dumpbin工具查看导出函数,执行命令:
    dumpbin /exports randomnumber.dll
    
    输出中能看到fetch_number才说明函数导出正常。

三、修复C函数的名字改编问题

C语言编译时会自动修改函数名(比如变为_fetch_number@0),导致Dart无法找到对应符号。需要在头文件中用extern "C"声明函数,避免名字改编:

修改randomnumber.h:

#ifdef __cplusplus
extern "C" {
#endif

int fetch_number();

#ifdef __cplusplus
}
#endif

修改后重新编译DLL,函数名将保持fetch_number不变。

四、移除无用权限配置

你添加的Android/iOS权限对Windows桌面应用完全无效,直接删除以下配置:

  • AndroidManifest.xml中的存储权限声明;
  • Info.plist中的相册权限描述。

五、检查DLL依赖库

如果你的DLL依赖第三方运行时库(比如MinGW的libgcc_s_seh-1.dll等),需要将这些依赖库一并放到应用运行目录下。可以用Dependency Walker工具查看DLL的依赖项,确保所有依赖文件都存在。


内容的提问来源于stack exchange,提问作者kavan gowda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:05:07