我正在尝试在我的 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/