iOS: Failed to lookup symbol (dlsym(RTLD_DEFAULT, ***)
自从做了 Flutter 调用 rust 代码,xcode 的更新过程中遇到很多次这个问题了,记性不好,每次都是重新去解决,现在记录下来。
Invalid argument(s): Failed to lookup symbol (dlsym(RTLD_DEFAULT, store_dart_post_cobject): symbol not found)
静态链接库引入
首先确定你的静态链接库 .a
正确的引入到了项目中,你使用的 plugin 的 .podspec
文件中定义了静态链接库的位置
s.public_header_files = 'Classes**/*.h'
s.source_files = 'Classes/**/*'
s.static_framework = true
s.vendored_libraries = "**/*.a"
在你的 plugin 的 .podspec
文件或者 main app 的 Build Settings 中应当将静态链接库配置到 ldflag,比如 libmylib.a
就是-lmylib
'OTHER_LDFLAGS' => '-lmylib'
防止被编译器清理
在 Xcode 中打开项目,点开 Runner -> Build Settings 搜索 “Strip” 找到以下两项
- Strip Style::改为 Non-Global Symbols 去除非全局符号但保存外部符号。
- Dead Code Striping:改为 No 防止 xcode 检测不到未在 Swift 代码中使用的 symbol。
参考链接:
- https://docs.flutter.dev/development/platform-integration/ios/c-interop#stripping-ios-symbols
- https://github.com/fzyzcjy/flutter_rust_bridge/issues/250
Flutter Release 测试 (Archive)
flutter run -d iPhone --release