system/core/libutils/include/utils/StrongPointer.h:157:9: runtime error: control flow integrity check for type 'android::RefBase' failed during non-virtual call
时间: 2024-01-29 21:04:06 浏览: 228
这个运行时错误通常是由于代码中的类型转换或内存访问错误导致的。可能是由于类型转换错误或内存访问越界导致的。以下是几个可能的解决方案:
1. 检查代码中的类型转换是否正确。在 C++ 中,如果你想将一个基类指针转换为派生类指针,你需要使用 dynamic_cast 进行类型转换,而不是使用 static_cast。
2. 检查代码中的内存访问是否正确。确保你的代码没有越界访问数组或指针。
3. 确保你的代码中没有使用已经被释放的对象。当你使用一个已经被释放的对象时,通常会导致运行时错误。
4. 尝试使用 Address Sanitizer (ASan) 工具来检测内存错误。ASan 是一个内存错误检测工具,它可以帮助你检测内存访问越界、使用已经被释放的对象等错误。
希望这些解决方案能够帮助你解决这个问题。
相关问题
ld.lld: error: undefined symbol
报错信息中提到了"ld.lld: error: undefined symbol"。这个错误通常表示在链接过程中找不到某个符号的定义。根据引用中的报错信息,这个错误是由于找不到"android::RefBase::decStrong(void const*) const"这个符号的定义引起的。为了解决这个问题,可以尝试修改编译配置文件(Android.mk)来解决。根据引用的建议,在LOCAL_C_INCLUDES中添加系统核心库(system/core)的路径来解决。具体的修改如下:LOCAL_C_INCLUDES = \ system/core/libnetutils/include \ system/core/libutils/include。另外,根据引用的答案,也可以尝试在Android.mk中添加LOCAL_LDFLAGS := -Wl,--unresolved-symbols=ignore-all来忽略未定义符号的报错。希望这些解决方案对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Android 编译错误undefined symbol分析与解决](https://blog.csdn.net/k663514387/article/details/107107350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
subdirs = [ "*", ] cc_test { name: "test-opengl-gl2_copyTexImage", include_dirs: ["."], srcs: [ "gl2_copyTexImage.cpp", ], gtest: false, dms: true, shared_libs: [ "libcutils", "libEGL", "libGLESv2", "libui", "libgui", "libutils", "libjpeg", "libprotobuf", "libTSDesensitizationAlgorithm", "libecarx_engine", ], static_libs: ["libglTest"], cflags: [ "-DGL_GLEXT_PROTOTYPES", "-Wall", "-Werror", ], compile_multilib: "64", }转为Android.mk
将 `Android.bp` 文件转换为 `Android.mk` 文件的步骤如下:
1. 创建一个新的 `Android.mk` 文件,例如:
```
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test-opengl-gl2_copyTexImage
LOCAL_SRC_FILES := gl2_copyTexImage.cpp
LOCAL_CFLAGS := -DGL_GLEXT_PROTOTYPES -Wall -Werror
LOCAL_SHARED_LIBRARIES := libcutils libEGL libGLESv2 libui libgui libutils libjpeg libprotobuf libTSDesensitizationAlgorithm libecarx_engine
LOCAL_STATIC_LIBRARIES := libglTest
LOCAL_MULTILIB := 64
include $(BUILD_SHARED_LIBRARY)
```
2. 将 `cc_test` 块中的内容转换为 `LOCAL_` 变量形式。例如,将 `name` 转换为 `LOCAL_MODULE`,将 `srcs` 转换为 `LOCAL_SRC_FILES`,将 `cflags` 转换为 `LOCAL_CFLAGS`,将 `shared_libs` 转换为 `LOCAL_SHARED_LIBRARIES`,将 `static_libs` 转换为 `LOCAL_STATIC_LIBRARIES`,将 `compile_multilib` 转换为 `LOCAL_MULTILIB`。
3. 将 `dms: true` 删除,因为在 `Android.mk` 文件中不需要使用这个属性。
4. 保存并关闭 `Android.mk` 文件。
5. 将 `Android.mk` 文件和 `gl2_copyTexImage.cpp` 文件放置在同一个目录下。
6. 在终端或命令行窗口中,进入 `Android.mk` 文件所在的目录。
7. 运行以下命令:
```
ndk-build
```
或者
```
ndk-build V=1
```
这两个命令都可以编译和构建 `test-opengl-gl2_copyTexImage` 动态链接库。
注意,在使用 `Android.mk` 文件进行编译时,需要确保你的 NDK 环境已经正确设置,并且在 `Android.mk` 文件中包含了正确的库和头文件路径。
阅读全文