V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
musi
V2EX  ›  程序员

Flutter 在 iOS 上使用 rust 构建的静态库报错 symbol not found

  •  
  •   musi · 12 小时 53 分钟前 · 396 次点击

    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();
    
    13 条回复    2025-01-23 22:41:25 +08:00
    iOCZS
        1
    iOCZS  
       11 小时 56 分钟前   ❤️ 1
    静态库架构对吗? ARM 模拟器需要 ARM 静态库,另外 debug 不会对静态库进行裁剪,应该都会包含进去。
    musi
        2
    musi  
    OP
       11 小时 49 分钟前
    @iOCZS #1 架构是对的,实际上我 arm 和 x86 的都试过
    passon
        3
    passon  
       11 小时 18 分钟前
    General -> Frameworks, Libraries, and Embedded Content 里面添加 .a 库了吗
    musi
        4
    musi  
    OP
       11 小时 17 分钟前
    @passon #3 已经添加过了,还是一样的问题
    suyulingxm
        5
    suyulingxm  
       11 小时 16 分钟前
    编译时,没有链接上,检查一下配置。
    passon
        6
    passon  
       11 小时 16 分钟前
    之前公司要搞这个费了我不少时间
    passon
        7
    passon  
       11 小时 14 分钟前   ❤️ 1
    保证静态库不会被裁剪:
    在 AppDelegate 里面加上 public func dummyMethodToEnforceBundling() { 里面实现所有要用到的静态库函数,
    passon
        8
    passon  
       11 小时 13 分钟前   ❤️ 1
    静态库的头文件也要导入
    passon
        9
    passon  
       11 小时 12 分钟前   ❤️ 1
    Copy Bundle Resources 也加上静态库
    passon
        10
    passon  
       11 小时 11 分钟前   ❤️ 1
    Build Phases -> Compile Sources 这里面要有静态库的头文件
    iOCZS
        11
    iOCZS  
       11 小时 9 分钟前   ❤️ 1
    静态库符号不存在,就是.o 没有被编译进去。一般 release 不会包含没被引用到的符号,debug 好像为了提高编译速度,会全量打包进去。
    musi
        12
    musi  
    OP
       11 小时 0 分钟前 via iPhone
    感谢各位大佬,等我明天试试再来反馈
    naiba
        13
    naiba  
       6 小时 4 分钟前
    https://lifelonglearn.ing/ios-failed-to-lookup-symbol 试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   883 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.