来自https://stackoverflow.com/a/11467040/1442443的问题
我的最终目标是转储用户空间堆栈。
我尝试将如下的 cpp 文件构建为android 平台上的可执行文件。因此,通过调用 tryToGetStack(),我可以在运行时获取可执行文件的调用堆栈。
#include <utils/CallStack.h>
namespace android
{
extern "C" void tryToGetStack()
{
CallStack stack;
stack.update();
stack.dump("");
}
}
并将 lib 设置添加到 Android.mak,因为 CallStack.tpp 在 libutils 中
LOCAL_SHARED_LIBRARIES += libutils
但我总是收到错误消息:
错误:未定义对 'android::CallStack::CallStack()' 的引用
错误:未定义对 'android::CallStack::update(int, int)' 的引用
...
似乎可执行文件在链接时解析符号而不是在运行时加载 .so 文件?我是否遗漏了什么或者 Android 构建系统有一些限制?
我知道这是一个简单的问题,但我真的需要帮助......
更新1
我尝试将代码添加到另一个可执行文件。结果是一样的……有人知道android构建系统的规则吗?
更新2
我的控制台中有一些关键词"target StaticExecutable: ...",我认为是答案。