'Undefined reference to...' 将 APP_STL 从 gnustl_static 切换到 c++_shared 后出现错误
'Undefined reference to...' error after switching APP_STL from gnustl_static to c++_shared
将 APP_STL 更改为 c++_shared 后遇到问题。我遇到了很多错误,例如“typename 的 vtable:错误:对 方法 的未定义引用”或“错误:对 [=18 的未定义引用” =]method ' 在我的共享库的 cpp 文件中。但是,当我使用 APP_STL = gnustl_static
时一切正常
我试图在我的 Android.mk 中使用 LOCAL_ALLOW_UNDEFINED_SYMBOLS = true 忽略此错误,但它让我运行时崩溃并显示消息 'dlopen failed: cannot locate symbol ... referenced by ...'。这是我的 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 文件中声明的方法的实现
将 APP_STL 更改为 c++_shared 后遇到问题。我遇到了很多错误,例如“typename 的 vtable:错误:对 方法 的未定义引用”或“错误:对 [=18 的未定义引用” =]method ' 在我的共享库的 cpp 文件中。但是,当我使用 APP_STL = gnustl_static
时一切正常我试图在我的 Android.mk 中使用 LOCAL_ALLOW_UNDEFINED_SYMBOLS = true 忽略此错误,但它让我运行时崩溃并显示消息 'dlopen failed: cannot locate symbol ... referenced by ...'。这是我的 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 文件中声明的方法的实现