首页 > 解决方案 > 将 APP_STL 从 gnustl_static 切换到 c++_shared 后出现“未定义的引用...”错误

问题描述

将我的 APP_STL 更改为 c++_shared 后,我遇到了一个问题。我在共享库的 cpp 文件中遇到了很多错误,例如 ' vtable for typename : error: undefined reference to method ' 或 ' error: undefined reference to method ' 在我的共享库的 cpp 文件中。但是,当我使用 APP_STL = gnustl_static 时一切正常

我试图在我的 Android.mk 中使用 LOCAL_ALLOW_UNDEFINED_SYMBOLS = true 来忽略此错误,但它给了我运行时崩溃并显示消息“dlopen 失败:无法找到符号 ... 引用...”。这是我的 Android.mk 的一部分。所有未定义的函数都包含在 allHeadersHere 文件中。

LOCAL_MODULE    := mySharedLib    

LOCAL_C_INCLUDES := allHeadersHere

LOCAL_CPPFLAGS    :=  -Wno-error=narrowing -D_DEBUG -std=c++11 -pthread -frtti -fexceptions -g -gdwarf-2 -DANDROID_WCHAR -DANDROID_GLES2    
LOCAL_STATIC_LIBRARIES := somelib

FILE_LIST := $(wildcard $(LOCAL_PATH)/*.c*)       
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)    

include $(BUILD_SHARED_LIBRARY)

标签: androidc++android-studioandroid-ndkndk-build

解决方案


所以最后我解决了这个问题。也许它对某人有用。我的项目中有一个用于 NDK-v15 的静态库。并且这些库是使用与 APP_STL=c++_shared 不兼容的工具链构建的。所以我在项目中添加了相同的库,但用于 NDK-v18。但我忘了更新 cpp 文件。结果编译器试图找到在新静态库中不推荐使用但仍在旧 cpp 文件中声明的方法的实现


推荐阅读