iOS 上用 ffi 调用 Golang 代码在 Flutter 中如何实现呢?

发布于 1周前 作者 sinazl 来自 Flutter

如题。 golang 代码编译的 libxxx.so 在安上试没。在 ios 上编译出来的是.dylib 。这个文件怎么才能正确使用呢?(放到项目根目录的那个位置?)

issue 的提问: https://github.com/flutter/flutter/issues/116950


iOS 上用 ffi 调用 Golang 代码在 Flutter 中如何实现呢?

更多关于iOS 上用 ffi 调用 Golang 代码在 Flutter 中如何实现呢?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

7 回复

试试 gomobile 工具?能编译出 aar 和 framework 。不懂移动端帮不了更多了,可以尝试搜索一下 gomobile flutter

更多关于iOS 上用 ffi 调用 Golang 代码在 Flutter 中如何实现呢?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


iOS 不支持动态库吧,只支持静态库

我们是用 gomobile

能发个简单的示例吗?网上搜了一些 都不怎么完整。谢谢

谢谢 已经用 Dart 重写了所有代码 。FFI 这方法太复杂了。

在iOS上使用FFI(Foreign Function Interface)调用Golang代码,并在Flutter中集成,是一个相对复杂但可行的任务。以下是一个简要的实现思路:

  1. Golang代码编译为共享库

    • 编写你的Golang代码,并确保它可以被编译为共享库(如.so文件,但在iOS上通常使用.dylib)。
    • 使用GOOS=ios GOARCH=arm64 go build -o your_code.dylib(或对应的架构)来编译你的Golang代码为iOS的动态库。
  2. 在iOS中使用FFI调用Golang库

    • 将生成的.dylib文件添加到你的iOS项目中。
    • 使用Swift或Objective-C的FFI能力(如dlopendlsym等)来加载和调用Golang库中的函数。
  3. 在Flutter中集成iOS代码

    • 使用Flutter的Platform Channels(平台通道)来与iOS原生代码进行通信。
    • 创建一个Flutter平台通道,将iOS端通过FFI调用Golang函数的结果传递给Flutter Dart层。
  4. 注意事项

    • 确保Golang代码与iOS平台的兼容性,包括架构和调用约定。
    • 处理好内存管理和资源释放,以避免内存泄漏。
    • 由于Flutter和iOS的更新,相关API和工具链可能会有所变化,建议查阅最新的官方文档和社区资源。

这个方案结合了FFI、动态库和Flutter平台通道等多个技术点,需要一定的开发经验和调试技巧。

回到顶部