不确定对Callstack库的引用

时间:2019-04-25 07:43:21

标签: android c++ c callstack

我尝试如下构建cpp文件到Android平台上的可执行文件。因此,通过调用dumping_callstack(),我可以在运行时获取可执行文件的调用堆栈。但是有一些错误。

  1. cpp文件:mycallstack.cpp

    #include <utils/CallStack.h>
    extern "C" void dumping_callstack()
    {
         CallStack stack("haha");
    }
    
  2. mycallstack.h

    void dumping_callstack();
    
  3. test.c

    #include <mycallstack.h>
    
    main()
    {
       dumping_callstack();
    } 
    
  4. 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()'

2 个答案:

答案 0 :(得分:0)

CallStack::CallStackCallStack::~CallStack的实现未提供给编译器/链接器。 您可能忘记了将其链接到相应的目标文件/库,建议您阅读文档,其中可能包含有关链接的一些信息。有时,仅使用-static开关就可以对其进行编译,这使得可执行文件几乎是独立的,有些库甚至需要静态链接。

也可能是这种情况,该实现不适用于发行版,我认为CallStack类只能用于调试。

答案 1 :(得分:0)

在android 9.0中,您应该使用libutilscallstack。 有关更多详细信息,请查看“ android / system / core / libutils / Android.bp”。