Когда я читаю код процесса инициализации, который находится по пути system/core/init/, я хочу напечатать функцию стек вызовов.
Я пытаюсь написать код на init.cpp
Код: Выделить всё
#include
android::CallStack stack;
stack.update();
stack.log("TomYeo : CallStackDemo");
Код: Выделить всё
system/core/libutils/CallStack.cpp:43: error: undefined reference to 'Backtrace::Create(int, int, BacktraceMap*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
- определены в system/core/libutils
Код: Выделить всё
CallStack - определены в system/core/libbacktrace
Код: Выделить всё
Backtrace::Create - система/core/init/Android.mk зависит от STATIC LIB : libutils
- Система/core/libutils/Android.mk зависит от ОБЩЕЙ LIB : libbacktrace
С другой стороны, я попробуйте проверить флаг Backtrace::Create в файле libbacktrace.so, полюбите его.
Код: Выделить всё
$ objdump -T libbacktrace.so | grep "Create"
000050c9 g DF .text 00000056 Base _ZN12BacktraceMap6CreateEib
00003341 g DF .text 00000068 Base _ZN9Backtrace6CreateEiiP12BacktraceMap
- У меня есть часы: трассировка стека вызовов метода печати AOSP
- У меня есть часы: https://yongbingchen.github .io/blog/2013/05/09/dump-stack-in-android-native-c-code/
в system/core/init/Android.mk Я пробовал много раз, список попыток:
-
Код: Выделить всё
LOCAL_STATIC_LIBRARIES := libbase libbacktrace libutils -
Код: Выделить всё
LOCAL_SHARED_LIBRARIES := libbacktrace libutils
Код: Выделить всё
system/core/libutils/CallStack.cpp:43: error: undefined reference to 'Backtrace::Create(int, int, BacktraceMap*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
- это будет сборка успешна, когда мое руководство выполняет команду с полным путем к libbacktrace.so
- но я не знаю, как добавить полный путь к файлу libbacktrace.so с помощью файла mk
- По пути сначала соберите все, бросить компоновщик не удалось.
выполнить вручную init build comman; командная строка внизу - перестроить с последним результатом сборки, сборка успешна
- но записать результат на устройство, не удается повторно запустить ОС Android . перезапуск безлимитного устройства.
Код: Выделить всё
prebuilts/misc/linux-x86/ccache/ccache prebuilts/clang/linux-x86/host/3.6/bin/clang++
-nostdlib
-Bstatic
-static
-Wl,--gc-sections
-o
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/EXECUTABLES/init_intermediates/LINKED/init
# it will build success , w h e n m y m a n u a l e x e c u t e t h e c o m m a n d w i t h t h e l i b b a c k t r a c e . s o f u l l p a t h < b r / > # b u t i d o n ' t k n o w h o w t o a d d t h e l i b b a c k t r a c e . s o f i l e f u l l p a t h b y m k f i l e < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h a m m e r h e a d - e n g / b u i l d _ o u t / t a r g e t / p r o d u c t / h a m m e r h e a d / o b j / l i b / l i b b a c k t r a c e . s o < b r / > < b r / > - L < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h a m m e r h e a d - e n g / b u i l d _ o u t / t a r g e t / p r o d u c t / h a m m e r h e a d / o b j / l i b < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h a m m e r h e a d - e n g / b u i l d _ o u t / t a r g e t / p r o d u c t / h a m m e r h e a d / o b j / l i b / c r t b e g i n _ s t a t i c . o < b r / > - W l , - z , n o e x e c s t a c k < b r / > - W l , - z , r e l r o < b r / > - W l , - z , n o w < b r / > - W l , - - b u i l d - i d = m d 5 < b r / > - W l , - - w a r n - s h a r e d - t e x t r e l < b r / > - W l , - - f a t a l - w a r n i n g s < b r / > - W l , - - i c f = s a f e < b r / > - W l , - - h a s h - s t y l e = g n u < b r / > - W l , - - n o - f i x - c o r t e x - a 8 < b r / > - t a r g e t a r m - l i n u x - a n d r o i d e a b i < b r / > - B p r e b u i l t s / g c c / l i n u x - x 8 6 / a r m / a r m - l i n u x - a n d r o i d e a b i - 4 . 9 / a r m - l i n u x - a n d r o i d e a b i / b i n < b r / > - W l , - - e x c l u d e - l i b s , l i b u n w i n d _ l l v m . a < b r / > - W l , - - n o - u n d e f i n e d < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h a m m e r h e a d - e n g / b u i l d _ o u t / t a r g e t / p r o d u c t / h a m m e r h e a d / o b j / E X E C U T A B L E S / i n i t _ i n t e r m e d i a t e s / b o o t c h a r t . o < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h a m m e r h e a d - e n g / b u i l d _ o u t / t a r g e t / p r o d u c t / h a m m e r h e a d / o b j / E X E C U T A B L E S / i n i t _ i n t e r m e d i a t e s / b u i l t i n s . o < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h a m m e r h e a d - e n g / b u i l d _ o u t / t a r g e t / p r o d u c t / h a m m e r h e a d / o b j / E X E C U T A B L E S / i n i t _ i n t e r m e d i a t e s / d e v i c e s . o < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h a m m e r h e a d - e n g / b u i l d _ o u t / t a r g e t / p r o d u c t / h a m m e r h e a d / o b j / E X E C U T A B L E S / i n i t _ i n t e r m e d i a t e s / i n i t . o < b r / > / V o l u m e s / B e y o u r s e l f / A O S P / a n d r o i d - 6 . 0 . 0 _ r 1 . t m p / a o s p _ h ammerhead-eng/build_out/target/product/hammerhead/obj/EXECUTABLES/init_intermediates/keychords.o
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/EXECUTABLES/init_intermediates/property_service.o
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/EXECUTABLES/init_intermediates/signal_handler.o
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/EXECUTABLES/init_intermediates/ueventd.o
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/EXECUTABLES/init_intermediates/ueventd_parser.o
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/EXECUTABLES/init_intermediates/watchdogd.o
-Wl,--whole-archive
-Wl,--no-whole-archive
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libutils_intermediates/libutils.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libinit_intermediates/libinit.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libfs_mgr_intermediates/libfs_mgr.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libsquashfs_utils_intermediates/libsquashfs_utils.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/liblogwrap_intermediates/liblogwrap.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libbase_intermediates/libbase.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libext4_utils_static_intermediates/libext4_utils_static.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libutils_intermediates/libutils.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/liblog_intermediates/liblog.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libselinux_intermediates/libselinux.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libmincrypt_intermediates/libmincrypt.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libc++_static_intermediates/libc++_static.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libdl_intermediates/libdl.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libsparse_static_intermediates/libsparse_static.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libz_intermediates/libz.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libunwind_llvm_intermediates/libunwind_llvm.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libdl_intermediates/libdl.a
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a
-Wl,--start-group
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/STATIC_LIBRARIES/libc_intermediates/libc.a prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/lib/libatomic.a prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/libgcc.a
-Wl,--end-group
/Volumes/Beyourself/AOSP/android-6.0.0_r1.tmp/aosp_hammerhead-eng/build_out/target/product/hammerhead/obj/lib/crtend_android.o
Подробнее здесь: https://stackoverflow.com/questions/788 ... call-stack
Мобильная версия