忍者错误:... / import_includes需要... / export_includes

时间:2018-08-29 15:51:09

标签: android

尝试将“普通” Makefile重写为Android.mk。原始文件:

CPPFLAGS += -Iandroid_linux -D_HW_DONT_INCLUDE_CORE_


# HAL source files location
HAL_SRC_DIR := ../..

# include dirs
CPPFLAGS += -I$(HAL_SRC_DIR)/tools

# test application
TEST_MODULE := test-sensors-hal
TEST_MODULE_FILES := test-sensors-hal.cpp

OBJ_FILES := $(SRC_C_FILES:.c=.o) $(SRC_CPP_FILES:.cpp=.o)

.PHONY: all clean

all: $(MODULE) $(TEST_MODULE)

clean:
    -rm -f $(OBJ_FILES) $(MODULE) $(TEST_MODULE)

$(MODULE): $(OBJ_FILES)
    $(CXX) $(CFLAGS) $(LDFLAGS) $^ -o $@

$(TEST_MODULE): $(MODULE)
    $(CXX) $(CPPFLAGS) $(CFLAGS) $(TEST_MODULE_FILES) -ldl -lpthread -lstdc++ -o $@

重写了Android.mk:

LOCAL_PATH := $(call my-dir)

# InvenSense Sensors HAL
include $(CLEAR_VARS)

LOCAL_CPPFLAGS += -Iandroid_linux -D_HW_DONT_INCLUDE_CORE_

LOCAL_MODULE := test-sensors-hal
LOCAL_CFLAGS := -Wall -Wextra -Werror
LOCAL_CFLAGS += -DLOG_TAG=\"Sensors\"
LOCAL_CFLAGS += -O2
LOCAL_LDLIBS:= -ldl -lpthread -lstdc++

# include dirs
LOCAL_C_INCLUDES+= $(LOCAL_PATH)/../../tools

# source C files
LOCAL_SRC_FILES := test-sensors-hal.cpp

include $(BUILD_EXECUTABLE)

在本地文件夹中运行“ mm”时出错:

ninja: error: 'out/target/product/msm8996/obj/SHARED_LIBRARIES/libpthread_intermediates/export_includes', needed by 'out/target/product/msm8996/obj/EXECUTABLES/test-sensors-hal_intermediates/import_includes', missing and no known rule to make it

这是什么意思,以及如何解决?

(我必须添加其他信息才能发布此信息,但这基本上是我的问题的总结)

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题,也许还要回答将来遇到的问题。此错误基本上是忍者版本的“未找到库”。事实证明,您不应该尝试链接pthread,因为它是仿生的Android libc的一部分。罪魁祸首是该代码包含“ pthread_cancel”,这不在NDK的pthread中。

对于我的特定用例,我不太关心pthread_cancel,因此将其删除并生成。关闭应用程序会产生一些与删除该错误有关的错误。