gpt4 book ai didi

android - 在 Android 中链接使用 CMake 编译的 C 库时出现问题。

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:18 24 4
gpt4 key购买 nike

我正在 Android 平台上构建一个守护进程。为此,我交叉编译了 Linux 到 Android 中存在的现有代码。请考虑我的以下 2 个案例 -

  1. 我使用 Cmake 和 Android NDK-15 交叉编译代码,然后手动推送到提供 Android 代码的开发板。我们push的路径是/system/lib。然后,如果我尝试执行我的守护进程(它也被手动推送到/system/bin ),一切正常。

但是,

2 通过在供应商特定文件夹中写入 Android.mk 文件,交叉编译库已被推送到 AOSP 代码中。我使用了 BUILD_PREBUILTS 方法并成功地将库推送到/system/lib。现在,当我尝试执行我的应用程序(使用 CMake 编译)时,出现链接器错误。

下面是我得到的错误(引用示例)-

  1. 下面是文件夹结构 -

文件夹总数 - 3

  a. abc folder which produces output libabc.so and links to libdef.so and 
libghi.so

b. def folder which produces output libdef.so

c. ghi folder which produces output libghi.so
  1. 当我将所有 3 个库(libabc.so、libdef.so、libghi.so)直接推送到/system/lib 和链接所有 3 个库的可执行文件 (drive_test) 时,我没有遇到任何问题。但是,当我将它与 AOSP 构建一起推送时,我在执行可执行文件 (drive_test) 时遇到以下错误 -

    一个。无法链接 ../abc/def.so 文件。

我无法调试如何解决此链接器问题。我不知道是不是因为 CMake(或)任何其他问题。

最佳答案

如果您正在尝试创建系统守护进程(位于/system/bin 中的东西),请不要使用 NDK。只需使用 AOSP 构建系统。

在 mydaemon/Android.bp 中(确保将此路径添加到根 Android.bp 文件):

cc_library {
name: "libmylib",
srcs: ["mylib.cpp"],
}

cc_binary {
name: "mydaemon",
srcs: ["mydaemon.cpp"],
shared_libs: ["libmylib"],
}

构建系统将负责将库和二进制文件放入适合您的位置。

关于android - 在 Android 中链接使用 CMake 编译的 C 库时出现问题。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662740/

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