Android.mk 包含问题带来的so.toc needed by 错误

Android系统源码开发系列教学视频链接:

Android 10.0 AOSP源码编译:

        AOSP源码开发环境搭建教学视频-百问100ask   

       Android系统 10.0 AOSP源码编译--CSDN程序员研修院

 Android 10.0 根文件系统和编译系统:

        Android根文件系统和编译系统教学视频-百问100ask

        Android 10.0 根文件系统和编译系统-CSDN程序员研修院


前言

在编写Android.mk的时候,编译一个动态库,以及一个链接调用该动态库的程序, 需要两个Android.mk, 编写的时候带来了一些错误,特此记录一下。


问题出错信息:

mytest/lib_test/so_test/Android.mk: error: cjson_test (EXECUTABLES android-arm64) missing libmycjson (SHARED_LIBRARIES android-arm64)
You can set ALLOW_MISSING_DEPENDENCIES=true in your environment if this is intentional, but that may defer real problems until later in the build.
build/make/core/main.mk:833: error: exiting from previous errors.
15:05:47 ckati failed with: exit status 1
 

ninja: error: 'out/target/product/generic_arm64/obj/lib/libmycjson.so.toc', needed by 'out/target/product/generic_arm/obj/EXECUTABLES/cjson_test_intermediates/LINKED/cjson_test', missing and no known rule to make it

上面显示的两处错误, 一个是在mmm模块编译的时候出现, 一个是在全编译的时候出现。

其实主要原因是在目录中出现多个Android.mk的时候, 必须做包含动作, 因为编译系统采用的是递归搜索,在搜索到父文件目录的Android.mk脚本后递归便被终止,导致子目录Android.mk没有编译。

当然还有一种情况, 就是当前程序链接的动态库没有被编译, 那么可以直接通过

make   libxxx  -j16

其中libxxx就是依赖的那个动态库的模块名。

目录结构

顶层Android.mk控制编译可执行程序。

libcjson目录中的Android.mk控制编译动态库

解决方法

顶层Android.mk

LOCAL_PATH:= $(call my-dir)

curdir=$(LOCAL_PATH)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
        main.c

LOCAL_C_INCLUDES += \
        $(LOCAL_PATH)/libcjson

LOCAL_SHARED_LIBRARIES += \
    liblog libcutils libutils \
    libmycjson \

LOCAL_CFLAGS += -Wno-error \
        -Wno-unused-parameter

LOCAL_MODULE:= cjson_test

LOCAL_MODULE_TAGS := optional
LOCAL_MULTILIB := 64

include $(BUILD_EXECUTABLE)

include $(curdir)/libcjson/Android.mk
 

要对子目录下的Android.mk进行包含

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值