用Android上的仪器分析
Clang Profiling with Instrumentation on Android
我正在为Android编译一个共享库,其他人将加载其应用程序。我想使用clang的谱图在Android设备上运行时介绍我的库。
我添加了CLANG选项-fprofile-instr-generate
中的汇编和链接,尽管在linux上编译并加载库时,这会产生原始分析数据,但在Android上,我会收到以下错误:
04-26 20:39:37.559 3313 3313 D androidruntime:关闭VM
04-26 20:39:37.559 3313 3313 E Androidruntime:致命例外:Main
04-26 20:39:37.559 3313 3313 E AndroidRuntime:过程:com.my.process,PID:3313
04-26 20:39:37.559 3313 3313 E androidruntime:
java.lang.unsatisfiedlinkerror:dlopen失败:无法找到符号&quot'__ start _____ llvm_prf_vnds;由"/path/to/my.so" ...
引用04-26 20:39:37.559 3313 3313 e androidruntime:在java.lang.runtime.loadlibrary0(runtime.java:1016(
>04-26 20:39:37.559 3313 3313 E androidruntime:在java.lang.system.system.loadlibrary(system.java:1657(
运行nm -D my.so | grep prf
时,我会得到:
00000000007F1CC8 D __ start ___ llvm_prf_cnts
0000000000827918 D __ start ___ llvm_prf_data
00000000008FB570 D __ _________ llvm_prf_names
000000000117bf58 d __ start ___ llvm_prf_vnds
0000000000827918 A __STOP ___ llvm_prf_cnts
00000000008FB568 A __STOP ___ llvm_prf_data
000000000117BF54 A __ stop ___ llvm_prf_names
0000000001181F58 A __STOP ___ llvm_prf_vnds
所以看起来像符号。
是否可以在Android上运行分析仪器?
分析与黄金和LLD连接器一起使用。此错误仅在使用BFD链接器时引起。.dynsym
节的sh_info
条目应指向第一个非本地符号,但在错误情况下,它设置了太低。
要验证,在有问题的共享库上运行readelf -aW
。在我的存储库中,.dynsym
的sh_info
为3,而至少有11个本地符号。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- OpenCV Android C++ imwrite not found
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- Android Studio 中带有静态库的原生C++代码
- 如何在 Android Studio 4 中编译 C/C++ 原生代码
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- Android 在编译二进制文件时重建静态库
- 我只想在Android 4.4中使用C++11库
- 无法将标准库导入本机 android 项目中的头文件
- Android Java USB for native cpp
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- Android Studio:如何在build.gradle中定义自定义宏(针对不同的构建变体),并让原生C / C++
- 在Android原生C++中使用Facemark opencv contrib
- 最小的CMake构建为Android
- 更新后的Android Studio现在需要Clang,不再链接到GCC的库
- 用Android上的仪器分析