c - 如何在flutter中运行c静态链接库(.a存档)?

标签 c flutter native dart-ffi

我正在尝试在我的 flutter 应用程序中包含一个 C 库。 我有一些 .h 文件和一个 .a 文件。 如果我理解正确的话,.h 文件是 header ,.a 文件是静态链接库。

我的目标是将该库中的一些函数运行到我的 flutter 代码中,但我发现 flutter 文档非常不清楚如何执行此操作。 我对 C 语言一无所知,所以我真的很难理解代码,而且我真的不知道从哪里开始。

我的问题是:是否可以在 flutter 应用程序中运行 .a 文件中的代码,以及如何做到这一点? 或者我需要 .so 文件或源代码吗?

最佳答案

一如既往,从 Flutter 插件项目开始。显然,请参阅此处的说明:https://flutter.dev/docs/development/platform-integration/c-interop

具体来说,对于 .a 文件

对于 iOS,创建一个文件夹 projectname/ios/lib 并将 .a 文件复制到其中,然后在 podspec 中添加额外的一行:

s.ios.vendored_libraries = 'lib/libFooBar.a'

对于 Android,创建一个文件夹 projectname/android/lib 并将 .a 文件复制到其中 - 不同的架构可能有多个文件。

build.gradle 中,靠近顶部添加:

def my_lib_folder = new File(projectDir, 'lib')

并在 externalNativeBuild 下的 defaultConfig 中添加 cmake 部分: 参数“-DMY_LIB_FOLDER=${my_lib_folder}”

这两个操作会导致该定义传递给 CMake。

现在,当您将 C 文件添加到项目时(请参阅顶部链接中的说明),它们将与您提供的 .a 库链接。

现在,在 CMakeLists.txt 中使用它

如果您没有 target_link_libraries 部分,请添加它,您现在可以添加此咒语来引用您的 .a 库:

${MY_LIB_FOLDER}/libSomelibrary${ANDROID_ABI}.a

关于c - 如何在flutter中运行c静态链接库(.a存档)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66943400/

相关文章:

c - 用户程序被 ^c 中断

C:从缓冲区复制字符串的方式不正确

javascript - 从外部门户网站将参数传递给 GWT nocache.js

ios - SwiftyJson Swift 3 无法访问 JSON 中的字符串

android - 无法加载库 "libdl.so.2"

luaL_loadfile()可以用luaL_loadbuffer()代替吗?

c - 从文件中获取指针地址

flutter - 为什么 Flutter Web 中的按钮没有边距?

Flutter 如何将单个数据从 Stream 传递到另一个屏幕并进行更新

flutter - 错误::未知目录结构,未找到 java 和 kotlin 文件