尝试将“普通” 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
这是什么意思,以及如何解决?
(我必须添加其他信息才能发布此信息,但这基本上是我的问题的总结)
答案 0 :(得分:0)
要回答我自己的问题,也许还要回答将来遇到的问题。此错误基本上是忍者版本的“未找到库”。事实证明,您不应该尝试链接pthread,因为它是仿生的Android libc的一部分。罪魁祸首是该代码包含“ pthread_cancel”,这不在NDK的pthread中。
对于我的特定用例,我不太关心pthread_cancel,因此将其删除并生成。关闭应用程序会产生一些与删除该错误有关的错误。