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

Flutter Windows构建时如何将依赖的dll文件打包到产物中

Flutter Windows 构建自动纳入自定义FFI DLL 操作指南

第三方依赖的dll可以正常打包的核心原因是包内置了Windows构建阶段的文件复制规则,你可以通过以下两种方案实现相同效果:

方案1:修改Windows构建脚本(推荐FFI场景使用)

该方案会将dll直接输出到exe同级目录,不需要修改你现有FFI加载路径,开发和生产环境逻辑一致:

  • 在项目根目录创建存储dll的文件夹,比如native_libs/windows/,按照x64/x86架构分子目录存放对应的dll文件
  • 打开项目路径下的windows/CMakeLists.txt文件,找到以下代码行附近的位置:
    install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
    
  • 在该行之前添加dll复制规则,示例如下:
    # 配置自定义FFI DLL路径
    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
      # 64位系统dll路径
      set(CUSTOM_FFI_DLL "${PROJECT_SOURCE_DIR}/../native_libs/windows/x64/my_custom.dll")
    else()
      # 32位系统dll路径
      set(CUSTOM_FFI_DLL "${PROJECT_SOURCE_DIR}/../native_libs/windows/x86/my_custom.dll")
    endif()
    # 声明构建时复制dll到输出目录
    install(FILES ${CUSTOM_FFI_DLL} DESTINATION "${CMAKE_INSTALL_BINDIR}")
    
  • 如果你有多个dll需要打包,重复添加install(FILES ...)规则即可

方案2:通过pubspec声明资源

该方案会将dll打包到应用的flutter_assets目录下,需要同步修改FFI的加载路径指向assets内的dll:

  • 在pubspec.yaml的flutter节点下添加资源声明:
    flutter:
      assets:
        - native_libs/windows/x64/my_custom.dll
    
  • FFI加载时需要通过flutter的资源路径查找dll,示例加载代码:
    final dllPath = join(await getApplicationSupportDirectory().path, 'data', 'flutter_assets', 'native_libs/windows/x64/my_custom.dll');
    final dylib = DynamicLibrary.open(dllPath);
    

验证生效

执行flutter build windows或者msix构建命令后,查看构建产物目录,即可看到对应的dll已经被自动纳入,运行时不会再报找不到dll的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:03