使用pg选项在Android上进行性能分析

时间:2012-09-18 07:08:59

标签: android gcc android-ndk profiling

我正在使用最新版本的NDK android-ndk-r8b
我有一些文件是通过NDK的Android编译器构建的。 i686-android-linux-gcc
现在我想描述这些文件。
我尝试使用-pg选项重建它,但收到错误:

/tmp/ccixJFcx.o: In function `main':
test1.C:(.text+0x17): undefined reference to `mcount'
collect2: ld returned 1 exit status

我想尝试使用i686-android-linux-gprof,但如果没有使用-pg选项成功编译,我就无法做到。

例如,让test1.C的来源为:

int main()
{
   return 0;
}

我可以使用以下选项使用标准gcc编译文件:
-g -O2 -m32 -Wa,--32 -Wl,-melf_i386 -pg 并将此文件与i686-android-linux-gprof

一起使用

但我不能将pg密钥与i686-android-linux-gcc一起使用,有人知道为什么吗?我怎样才能使用它,也许我必须在NDK重建过程中使用一些额外的库/编译选项?

2 个答案:

答案 0 :(得分:3)

您必须为Android.mk添加一些修改:

#include android-ndk-profiler.mk

LOCAL_CFLAGS := -pg
LOCAL_STATIC_LIBRARIES := andprof

LOCAL_LDLIBS += -llog

有关更多详细步骤,请参阅http://code.google.com/p/android-ndk-profiler/wiki/Usage

P.S。似乎x86运行时根本不包含mcount。在代码的其他地方定义它:

#if !( defined(_M_ARM) || defined(__arm__) )
   int mcount = 0;
#endif

答案 1 :(得分:0)

看起来没有mcount功能 我已经下载了Android Sources没有mcount功能,只有1次调用它所以我认为它提供了这个错误。

我在android issues发现了同样的问题。