Android.mk 包含问题带来的so.toc needed by 错误
Posted 旗浩QH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android.mk 包含问题带来的so.toc needed by 错误相关的知识,希望对你有一定的参考价值。
前言
在编写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.cLOCAL_C_INCLUDES += \\
$(LOCAL_PATH)/libcjsonLOCAL_SHARED_LIBRARIES += \\
liblog libcutils libutils \\
libmycjson \\LOCAL_CFLAGS += -Wno-error \\
-Wno-unused-parameterLOCAL_MODULE:= cjson_test
LOCAL_MODULE_TAGS := optional
LOCAL_MULTILIB := 64include $(BUILD_EXECUTABLE)
include $(curdir)/libcjson/Android.mk
要对子目录下的Android.mk进行包含
以上是关于Android.mk 包含问题带来的so.toc needed by 错误的主要内容,如果未能解决你的问题,请参考以下文章