android - 将 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)
解决方案
所以最后我解决了这个问题。也许它对某人有用。我的项目中有一个用于 NDK-v15 的静态库。并且这些库是使用与 APP_STL=c++_shared 不兼容的工具链构建的。所以我在项目中添加了相同的库,但用于 NDK-v18。但我忘了更新 cpp 文件。结果编译器试图找到在新静态库中不推荐使用但仍在旧 cpp 文件中声明的方法的实现
推荐阅读
- ios - UIViewController 包含通知
- javascript - 使用 mongoose 防御 XSS 攻击
- php - Mysql Select 嵌套 If 和 count
- arrays - 在构造函数中初始化向量数组
- c# - 为什么我的代码在启动 COMSecurity 时抱怨 VS2017 中的编组接口而不是 VS2013 中的编组接口
- c# - 当一个刚体撞击另一个刚体时如何降低“反弹”率?
- json - 命令行参数中的 PowerShell 变量插值
- xml - 从另一个网站读取 RSS 提要时出现问题
- css - 设置角度验证的最小日期
- javascript - 位置:带有溢出-y:auto的div内的绝对元素未显示在所需位置