我尝试如下构建cpp
文件到Android平台上的可执行文件。因此,通过调用dumping_callstack(),我可以在运行时获取可执行文件的调用堆栈。但是有一些错误。
cpp文件:mycallstack.cpp
#include <utils/CallStack.h>
extern "C" void dumping_callstack()
{
CallStack stack("haha");
}
mycallstack.h
void dumping_callstack();
test.c
#include <mycallstack.h>
main()
{
dumping_callstack();
}
android.mk
LOCAL_SRC_FILES += mycallstack.cpp
LOCAL_SHARED_LIBRARIES := libc libcutils liblog libutils
然后编译。
error: undefined reference to 'android::CallStack::CallStack(char const*,int)'
error: undefined reference to 'android::CallStack::~CallStack()'
答案 0 :(得分:0)
CallStack::CallStack
和CallStack::~CallStack
的实现未提供给编译器/链接器。
您可能忘记了将其链接到相应的目标文件/库,建议您阅读文档,其中可能包含有关链接的一些信息。有时,仅使用-static
开关就可以对其进行编译,这使得可执行文件几乎是独立的,有些库甚至需要静态链接。
也可能是这种情况,该实现不适用于发行版,我认为CallStack
类只能用于调试。
答案 1 :(得分:0)
在android 9.0中,您应该使用libutilscallstack
。
有关更多详细信息,请查看“ android / system / core / libutils / Android.bp”。