ArgumentError:无效参数:无法加载动态库 'libnative.so':dlopen 失败:未找到库 "libnative.so"
ArgumentError: Invalid argument(s): Failed to load dynamic library 'libnative.so': dlopen failed: library "libnative.so" not found
ID: flutter/dart-ffi-library-not-found
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Flutter 3.7 | active | — | — | — |
| Dart 3.0 | active | — | — | — |
| Android 12 | active | — | — | — |
| iOS 15 | active | — | — | — |
| Linux | active | — | — | — |
根因分析
Dart FFI 绑定引用的原生共享库未随应用打包,或未放置在目标平台的正确目录中(Android jniLibs、iOS Frameworks 或 Linux/MacOS 库路径)。
English
A Dart FFI binding references a native shared library that is not bundled with the app or not placed in the correct directory for the target platform (Android jniLibs, iOS Frameworks, or Linux/MacOS library paths).
官方文档
https://dart.dev/guides/libraries/c-interop解决方案
-
Place the shared library in the correct platform-specific directory: android/app/src/main/jniLibs/<abi>/ for Android, or use a Flutter plugin with native code.
-
Use the ffi package's DynamicLibrary.process() to load symbols from the main process if the library is linked at compile time.
无效尝试
常见但无效的做法:
-
80% 失败
Assets are not loaded as shared libraries; FFI requires the library to be in the system library path or bundled as a native dependency.
-
70% 失败
FFI resolves library paths from the system loader, not the Dart script's location; relative paths are platform-dependent and often fail.
-
60% 失败
On mobile platforms (Android/iOS), environment variables are not accessible to the app process; this only works on desktop.