Я использую 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-битных собственных библиотек? Буду очень признателен за любую помощь.
Добавление дополнительной информации на основе нескольких комментариев:
Мои gradle.properties содержат только одну строку. org.gradle.jvmargs = -Xmx1536m & build.gradle имеет следующие типы bulid:
buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile ('proguard-android.txt'), 'proguard-rules.pro'}}
Ошибка при компиляции:
app \ src \ main \ cpp \ native-lib.cpp: 2496: 12: ошибка: 'c' объявлен как массив с отрицательным размером
И когда я имел в виду, что произошла ошибка с предварительной обработкой, это ошибка, выделенная в IDE Android Studio с надписью «Длина массива не может быть отрицательной». Извиняюсь, если предыдущее утверждение сбивало с толку.
При печати с использованием% zu вместо% d в операторе журнала также печатается 4.