Почему Android Studio предоставляет разные значения для sizeof (long) во время выполнения по сравнению с временем компиляции или предварительной обработкой - PullRequest
0 голосов
/ 26 октября 2018

Я использую Android Studio (64-разрядная версия) в Windows 7 (64-разрядная версия) и собираю собственную библиотеку с помощью Android-NDK (с помощью Cmake). Ниже приведена самая маленькая разбивка моей проблемы.

Я использую значение sizeof (long) в качестве размера одного из моих массивов в нативном C-коде. Студия Android ведет себя иначе во время выполнения по сравнению с временем компиляции. Я печатаю значение sizeof (long) в операторе журнала, и оно печатает 4. Теперь для одного из моих требований мне нужно объявить массив как

char c [4 - sizeof (long)];

Я знаю, это выглядит странно, но это проблема моей большой проблемы. На самом деле мы используем размер некоторых структур для распределения размера некоторых массивов, и структура имеет несколько длинных переменных, которые вызывают проблемы и неправильные размеры.

Приведенное выше объявление выдает ошибку, говорящую «Длина массива не может быть отрицательной», и когда я изменяю значение на 8, то есть когда я объявляю массив как

char c [8 - sizeof (long)];

ошибка исчезла, поэтому sizeof (long) заполняется до 8 Android Studio и выдает ошибку препроцессора для значений меньше 8, а если я проигнорирую ошибку препроцессора и продолжу с компиляция, то компилятор выдает ту же ошибку. Но значение sizeof (long) в приведенном ниже операторе отладочной печати равно 4.

__ android_log_print (ANDROID_LOG_VERBOSE, "log", "Sizeof (long):% d", sizeof (long)); // Это печатает Sizeof (long): 4

Я установил макрос для сборки собственных 32-битных библиотек в моем файле CMakeLists.txt, используя set (TARGET_PREFER_32_BIT 1).

Может кто-нибудь помочь мне с этой проблемой. Нужно ли что-то еще сделать в настройке проекта Android Studio, чтобы размер (длинный) равнялся 4 на уровне препроцессора? Что еще нужно сделать для создания 32-битных собственных библиотек? Буду очень признателен за любую помощь.

Добавление дополнительной информации на основе нескольких комментариев:

  1. Мои gradle.properties содержат только одну строку. org.gradle.jvmargs = -Xmx1536m & build.gradle имеет следующие типы bulid: buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile ('proguard-android.txt'), 'proguard-rules.pro'}}

  2. Ошибка при компиляции:

app \ src \ main \ cpp \ native-lib.cpp: 2496: 12: ошибка: 'c' объявлен как массив с отрицательным размером

  1. И когда я имел в виду, что произошла ошибка с предварительной обработкой, это ошибка, выделенная в IDE Android Studio с надписью «Длина массива не может быть отрицательной». Извиняюсь, если предыдущее утверждение сбивало с толку.

  2. При печати с использованием% zu вместо% d в операторе журнала также печатается 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...