最近在Android Q上写一个bin文件时遇到编译报错的问题,具体报错如下:
ld.lld: error: undefined symbol: android::RefBase::decStrong(void const*) const>>> referenced by StrongPointer.h:182 (system/core/libutils/include/utilsPointer.h:182)>>> out/target/product/hello/obj/EXECUTABLES/hello_intermediates/hello.o:(say_hello(char const*, char*, int))clang-9: error: linker command failed with exit code 1 (use -v to see invocation)开始没认真分析报错的原因,直接在网上找答案了。看了网上的答案,基本上都是下面的答案:
在Android.mk中添加 LOCAL_LDFLAGS := -Wl,--unresolved-symbols=ignore-all然而,加上这句之后,依然还是报同样的错误,似乎他们的解决方法对这个问题不起作用。这个方法意思是告诉编译器 绕过这些检查,因此如果您尝试使用库中确实不存在的函数,ld就没有机会警告您,一般是不能随便用的。
然后来分析这个报错,它提示 undefined symbol。因此尝试去解决这个报错,通过引用system/core/libutils/include来解决,具体修改如下:
LOCAL_C_INCLUDES += \system/core/libnetutils/include \system/core/libutils/include \然后编译之后,依然报一样的错。
后来,将 include $(BUILD_EXECUTABLE) 改成 include $(BUILD_STATIC_LIBRARY) 之后,竟然编译过了。因此,怀疑是 build系统不让通过LOCAL_C_INCLUDES的形式引用。
虽然已经包含了头文件,但由于编译器找不到要