我正在开发一个颤振插件,它使用 OpenCV 作为依赖项来进行一些图像处理。我创建了一个桥接并初始化了这里提到的查找功能。基本的 sum 函数有效,但是只要我添加
s.dependency "OpenCV2"
在我的插件 pod 规范文件上。我的 pod 安装失败
[!] The 'Pods-Runner' target has transitive dependencies that include statically linked binaries: (/.../native_add/example/ios/Pods/OpenCV2/opencv2.framework)
这意味着私有 pod 中有一些静态库。因此我启用了
s.static_framework = true
在我的 podspec 文件上并运行pod install
. Pod 已安装,应用程序也已运行,但现在我遇到另一个问题,dart:ffi
即无法找到该符号。
2020-06-05 15:52:55.419438+0545 Runner[759:830306] [VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: Invalid argument(s): Failed to lookup symbol (dlsym(RTLD_DEFAULT, native_add): symbol not found)
#0 DynamicLibrary.lookup (dart:ffi-patch/ffi_dynamic_library_patch.dart:33:29)
#1 nativeAdd (package:native_add/native_add.dart:13:6)
#2 nativeAdd (package:native_add/native_add.dart:12:34)
那么如何dart:ffi
在启用 static_framework 的同时找到符号。相关的资源很少dart:ffi
。
更新
查找功能:
final DynamicLibrary nativeAddLib = Platform.isAndroid
? DynamicLibrary.open("libnative_add.so")
: DynamicLibrary.process();
final int Function(int x, int y) nativeAdd = nativeAddLib
.lookup<NativeFunction<Int32 Function(Int32, Int32)>>("native_add")
.asFunction();
C++ 函数
extern "C" __attribute__((visibility("default"))) __attribute__((used))
int32_t native_add(int32_t x, int32_t y) {
return x + y;
}