【问题标题】:Android Studio crashes with large C++ header fileAndroid Studio 因大型 C++ 头文件而崩溃
【发布时间】:2017-11-22 01:04:18
【问题描述】:

我正在尝试将 NDK 与 Android Studio 一起使用来编译我的 C++ 代码。 在我的 C++ 代码中,我有几个图像数据头,其中存储了非常大的无符号字符数组。我可以毫无问题地使用独立的 NDK 编译代码。

但是在 Android Studio 内部,如果我包含这些图像数据头文件,Android Studio 将在 100% CPU 负载下冻结。

我在 Android Studio 中是否缺少某个设置?我应该如何解决这个问题?我想在 Android Studio 中编译代码,所以我可以在 C++ 代码中单步执行。并且,图像数据应该在程序内部编译(不是单​​独的文件)。

更新

现在,我尝试在包含头文件之前的 cpp 中使用 #pragma 一次(而不是在头文件中定义),它会起作用。但是,如果我将包含保护或 #pragma 放在标题中,Android Studio 仍将冻结。我不明白为什么 pragma once 和 include 守卫如果我放在标题中就不起作用。

【问题讨论】:

  • 真的会结冰吗?你让它编译足够长(24 小时)吗?
  • 非常大到底有多大? 97000 行数组数据非常庞大,您已经说过一对。你在为 Android 写什么样的内存猪?
  • 头文件为7.3MB,包含1个无符号字符数组
  • 您可能包含另一个包含当前标头的标头,而没有使用 #pragma once 或其他保护。
  • 而且,我有 2 个这样的头文件。我没有使用过#pragma 一次。我现在就试试

标签: c++ android-ndk android-studio-3.0


【解决方案1】:

现在,我解决了这个问题。 而不是在头文件上定义 char 数组。 我将 char 数组移动到 cpp 文件并创建一个 global.h 标头,如下所示。 Android Studio 现在不会冻结。

global.h

#ifndef GLOBAL_H
#define GLOBAL_H

    extern const unsigned char image_data1[];
    extern const unsigned char image_data2[];

#endif // GLOBAL_H

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多