'未定义对..'的引用;将APP_STL从gnustl_static切换到c++_shared后出错

'Undefined reference to...' error after switching APP_STL from gnustl_static to c++_shared

本文关键字:shared 出错 static c++ STL 未定义 引用 APP gnustl      更新时间:2023-10-16

在将APP_STL更改为c++_shared后,我遇到了一个问题。我在共享库的cpp文件中遇到了很多错误,比如"vtable fortypename:error:undefined reference tomethod"或"error:unddefined reference tomethod。"。然而,当我使用APP_STL=gnustl_static 时,一切都很好

我试图在Android.mk中使用LOCAL_ALLOW_UNDEFINED_SYMBOLS=true忽略此错误,但它导致运行时崩溃,并显示消息"dlopen failed:cannot locate symbol…"。。。由…引用"。这是我的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)

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