gpt4 book ai didi

android - 如何使用 CMake 依赖于 Android native 代码?

转载 作者:行者123 更新时间:2023-11-29 19:29:53 27 4
gpt4 key购买 nike

我目前正在为 Android 应用程序 编写 JNI 代码以使用一些遗留 native 代码。我选择使用 CMake 来尝试一下(这是我第一次使用它)。

我想使用 Jansson 将一个相当复杂的 C 结构序列化为 JSON 格式图书馆。这将使它更容易暴露给 Java。

这是我的问题:如何在我的项目中导入 Jansson 作为我自己代码的依赖项?

我尝试在我自己的源中导入 Jansson 并使用 add_subdirectory 子句来构建它。结果,我可以在输出中看到一些中间 CMake 文件,但没有实际编译的文件

这是我的 CMake 文件的样子:

cmake_minimum_required(VERSION 3.4.1)

include_directories(
src/main/cpp/xxx/Include
)

add_subdirectory("src/main/cpp/jansson")

add_library( # Sets the name of the library.
native-lib

# Sets the library as a shared library.
SHARED

# Provides a relative path to your source file(s).
# Associated headers in the same location as their source
# file are automatically included.
src/main/cpp/xxx/file1.c
src/main/cpp/xxx/file2.c
src/main/cpp/xxx/file3.c
src/main/cpp/xxx/file4.c
src/main/cpp/native-lib.cpp )

find_library( # Sets the name of the path variable.
log-lib

# Specifies the name of the NDK library that
# you want CMake to locate.
log )

target_link_libraries( # Specifies the target library.
native-lib

# Links the target library to the log library
# included in the NDK.
${log-lib} )

欢迎任何帮助!!

最佳答案

好的,所以我只是缺少声明我的库对 Jansson 的依赖性。这是通过将其项目名称添加到现有的 target_link_library 子句中实现的。

target_link_libraries( # Specifies the target library.
native-lib

# Links the target library to the log library
# included in the NDK.
jansson
${log-lib} )

如果其他人(也可能是我 future 的自己)遇到同样的问题,以下是在 Android CMake 文件中添加 native 依赖项的所有必要步骤:

  • 查找已经支持 CMake 的库
  • 在你的项目中导入库代码(我使用的是 git submodule)
  • 添加 add_subdirectory 子句,指向包含库 CMake 文件的文件夹
  • 将包含文件添加到 include_directories(希望导入的库为此设置一个变量,例如我的 JANSSON_INCLUDE_DIRS
  • 通过将库项目名称添加到target_link_libraries 子句来添加依赖

完成后:噗!魔法 !一切正常!

关于android - 如何使用 CMake 依赖于 Android native 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40264438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com