【android9.0】system/core下的usbhost模塊沒法輸出log到logcat

現象:原生android9.0 sdk,system/core/libusbhost是usb模塊用來和驅動通訊的模塊,在調試時但願能輸出log到logcat,打開調試開關從新編譯代碼,報「undefined reference to '__android_log_print'」錯誤node

FAILED: out/soong/.intermediates/system/core/libusbhost/libusbhost/linux_glibc_x86_64_shared/libusbhost.so 
prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++  @out/soong/.intermediates/system/core/libusbhost/libusbhost/linux_glibc_x86_64_shared/libusbhost.so.rsp out/soong/.intermediates/external/compiler-rt/libcompiler_rt-extras/linux_glibc_x86_64_static/libcompiler_rt-extras.a out/soong/.intermediates/external/libcxx/libc++/linux_glibc_x86_64_shared/libc++.so  -o out/soong/.intermediates/system/core/libusbhost/libusbhost/linux_glibc_x86_64_shared/libusbhost.so -shared -Wl,-soname,libusbhost.so -target x86_64-linux-gnu -Bprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin  -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--no-undefined-version --gcc-toolchain=prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8 --sysroot prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot -m64 -Bprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/lib/gcc/x86_64-linux/4.8 -Lprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/lib/gcc/x86_64-linux/4.8 -Lprebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/lib64 -ldl -lpthread -lm -lrt -Wl,-rpath,\$ORIGIN/../lib64 -Wl,-rpath,\$ORIGIN/lib64  -nodefaultlibs -lgcc_s -lgcc -lc -lgcc_s -lgcc
system/core/libusbhost/usbhost.c:211: error: undefined reference to '__android_log_print'
system/core/libusbhost/usbhost.c:278: error: undefined reference to '__android_log_print'
system/core/libusbhost/usbhost.c:301: error: undefined reference to '__android_log_print'
system/core/libusbhost/usbhost.c:305: error: undefined reference to '__android_log_print'
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)
[ 16% 97/605] Construct recovery from boot
ninja: build stopped: subcommand failed.
11:04:39 ninja failed with: exit status 1

問題緣由:linux

此問題的根本緣由是,編譯系統在連接時找不到相應的函數實現體,與頭文件缺失無關,即函數實現體所在的liblog庫沒法被找到android

解決辦法:修改Android.bp,將liblog共享庫聲明放在target外面,暫不清楚放target裏邊爲何會連接不到c++

diff --git a/libusbhost/Android.bp b/libusbhost/Android.bp
old mode 100644
new mode 100755
index fc6f305..43076eb
--- a/libusbhost/Android.bp
+++ b/libusbhost/Android.bp
@@ -24,13 +24,16 @@ cc_library {
     srcs: ["usbhost.c"],
     cflags: ["-Werror"],
     export_include_dirs: ["include"],
+    shared_libs: [
+       "liblog",
+    ],
     target: {
         android: {
             cflags: [
                 "-g",
                 "-DUSE_LIBLOG",
             ],
-            shared_libs: ["liblog"],
+            //shared_libs: ["liblog"],
         },
         darwin: {
             enabled: false,
相關文章
相關標籤/搜索