android - 在 AOSP 7.1 中链接预建共享库时未定义的引用
问题描述
我在 AOSP 7.1 中添加了一个模块,在其中我想使用我通过 Ndk 中的 android-toolchain 使用 cmake 生成的预构建共享库。但是当我想使用那个模块时,我得到了未定义的引用。
我也尝试将我的库更改为静态,但我仍然遇到同样的错误。
这是我使用预建的 libdump_android.so 的模块
include $(CLEAR_VARS)
LOCAL_MODULE := libdump_android
LOCAL_SRC_FILE := lib/../libdump_android.so
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include/../dump
include $(PREBUILT_SHARED_LIBRARY)
这是我使用的模块
LOCAL_MODULE := libdump
LOCAL_SRC_FILES := src/../dump/dump.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SHARED_LIBRARIES := liblog libdump_android
#LOCAL_LDLIBS += -L lib/../dump_android -ldump_android
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)
这是dump_android.h
#include <iostream>
class DumpAndroid
{
public:
DumpAndroid();
~DumpAndroid() = default;
void scream(void) const;
};
这是 dump_android.cpp:
#include "dump_android.h"
DumpAndroid::DumpAndroid()
{
std::cout << "DumpAndroid Constructed\n";
}
void DumpAndroid::scream(void) const
{
std::cout << "DumpAndroid SCREAM \n";
}
这是dump.h *(里面使用预建的src文件)
#include <dump_android.h>
class Dump
{
int dump_value;
DumpAndroid dump_android_;
public:
Dump();
~Dump() = default;
void init(void);
};
这是dump.cpp
#include "dump.h"
Dump::Dump(){ }
void Dump::init(void)
{
this->dump_value = 15;
dump_android_.scream();
}
这是我构建的 cmake 命令:
cmake -DCMAKE_TOOLCHAIN_FILE=~/Android/Ndk/android-ndk-r19c/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a"
当我构建模块时,我收到错误:
“错误:未定义对“DumpAndroid::DumpAndroid()”的引用”
“错误:未定义对“DumpAndroid::screa() const”的引用”
我知道我的设备肯定是 arm64-v8a。
解决方案
推荐阅读
- unity3d - unity3d shader e -f 转换为 glsl
- airflow - Airflow 插件 - 向 DAG 页面添加按钮
- node.js - Sequelize CLI:db:migrate 导致大多数列无法添加
- javascript - 普通 JavaScript 函数中的关键字“this”
- laravel - 如何对通过请求发送的 json 对象数组运行测试?
- python - 如何让 Python 脚本在 Web 服务器/主机上运行?
- javascript - 使用 Apps 脚本使用 IF 语句在数组中查找两个元素
- php - 如何根据数组将一个php循环变成另一个php循环?
- javascript - 无法在 node.js repl 之外访问“v8”
- python-3.x - GAMS 中开发的表达式在 PYOMO 中的等价物是什么?