【问题标题】:Trouble with undefined reference to Callstack library未定义对 Callstack 库的引用的问题
【发布时间】:2019-09-14 14:04:59
【问题描述】:

我尝试在 Android 平台上构建一个如下的cpp 文件到一个可执行文件。因此,通过调用 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()'

【问题讨论】:

    标签: android c++ c callstack


    【解决方案1】:

    在 android 9.0 中,您应该使用libutilscallstack。 查看“android/system/core/libutils/Android.bp”了解更多详情。

    【讨论】:

      【解决方案2】:

      CallStack::CallStackCallStack::~CallStack 的实现不提供给编译器/链接器。 您可能忘记将其链接到相应的目标文件/库,我建议您阅读文档,可能有一些有关链接的信息。有时只需使用-static 开关编译它会有所帮助,这使得可执行文件几乎是独立的,有些库甚至需要静态链接。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-14
        • 2019-02-23
        • 2010-11-16
        • 2012-06-17
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多