链接在Android中使用CMake编译的C库的问题。

时间:2017-08-13 16:56:13

标签: android c linux android-ndk cmake

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

  1. 我使用Cmake与Android NDK-15交叉编译代码,并手动推送到可以使用Android代码的主板上。我们推送的路径是/ system / lib。然后,如果我尝试执行我的守护进程(也被手动推送到/ system / bin),一切正常。
  2. 但是,

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

    以下是我得到的错误(参考例) -

    1. 以下是文件夹结构 -
    2. 文件夹总数 - 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. 当我直接在/ system / lib中推送所有3个库(libabc.so,libdef.so,libghi.so)和连接所有3个库的可执行文件(drive_test)时,我没有任何问题。但是,当我将其与AOSP构建一起推送时,执行可执行文件时会出现以下错误(drive_test) -

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

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

1 个答案:

答案 0 :(得分:0)

如果您正在尝试创建系统守护程序(某些内容位于/ 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"],
}

构建系统将处理将库和二进制文件放到适合您的位置。