Flutter 使用 rust 构建的 test.a 和 test.so 静态库,同样一个方法,在安卓模拟器上可以,在 iOS 模拟器上报 “Failed to lookup symbol: dlsym(RTLD_DEFAULT, rust_dump_file): symbol not found”
已经在 xcode 上配置了 Link Binary with Librarys 和 strip style 和 dead code stripping
if (Platform.isAndroid) {
try {
_lib = DynamicLibrary.open('test.so');
} catch (e) {
print('Error: $e');
rethrow;
}
} else if (Platform.isIOS) {
_lib = DynamicLibrary.process();
} else {
throw UnsupportedError('Unsupported platform');
}
final void Function(Pointer<Utf8>) test = _lib
.lookup<NativeFunction<Void Function(Pointer<Utf8>)>>("test")
.asFunction();
1
iOCZS 11 小时 56 分钟前 1
静态库架构对吗? ARM 模拟器需要 ARM 静态库,另外 debug 不会对静态库进行裁剪,应该都会包含进去。
|
3
passon 11 小时 18 分钟前
General -> Frameworks, Libraries, and Embedded Content 里面添加 .a 库了吗
|
5
suyulingxm 11 小时 16 分钟前
编译时,没有链接上,检查一下配置。
|
6
passon 11 小时 16 分钟前
之前公司要搞这个费了我不少时间
|
7
passon 11 小时 14 分钟前 1
保证静态库不会被裁剪:
在 AppDelegate 里面加上 public func dummyMethodToEnforceBundling() { 里面实现所有要用到的静态库函数, |
8
passon 11 小时 13 分钟前 1
静态库的头文件也要导入
|
9
passon 11 小时 12 分钟前 1
Copy Bundle Resources 也加上静态库
|
10
passon 11 小时 11 分钟前 1
Build Phases -> Compile Sources 这里面要有静态库的头文件
|
11
iOCZS 11 小时 9 分钟前 1
静态库符号不存在,就是.o 没有被编译进去。一般 release 不会包含没被引用到的符号,debug 好像为了提高编译速度,会全量打包进去。
|
12
musi OP 感谢各位大佬,等我明天试试再来反馈
|
13
naiba 6 小时 4 分钟前
https://lifelonglearn.ing/ios-failed-to-lookup-symbol 试试
|