首页 > 解决方案 > 在 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。

标签: androidshared-librarieslinker-errorsandroid-sourceandroid.mk

解决方案


推荐阅读