Проблемы с Android NDK C #ifndef - PullRequest
       30

Проблемы с Android NDK C #ifndef

0 голосов
/ 14 августа 2011

Я использую NDK-r6 в Windows и хочу скомпилировать простую C программу для тестирования.Просто скомпилировать консольную программу C не так просто, но я получил необходимые опции.Командная строка, которую я использую (в cygwin):

 /cygdrive/f/android/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-gcc
-fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__
-D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -Wno-psabi -march=armv5te
-mtune=xscale -msoft-float -mthumb -Os  -funroll-all-loops -fomit-frame-pointer
-fno-strict-aliasing -finline-limit=64 -IF:/android_ws/stkeys/jni -DANDROID  
-Wa,--noexecstack -O3 -DNDEBUG -g -Wl,
-rpath-link=/android/android-ndk-r6/platforms/android-5/arch-arm/usr/lib 
-L/android/android-ndk-r6/platforms/android-5/arch-arm/usr/lib -nostdlib
/android/android-ndk-r6/platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o 
-lc -IF:/android/android-ndk-r6/platforms/android-5/arch-arm/usr/include
F:/android_ws/stkeys/jni/stkeys.c F:/android_ws/stkeys/jni/sha1.c
-o F:/android_ws/stkeys/jni/stkeys

Один ад командной строки, но он работает.Проблема в том, что этот код ломается:

#ifndef uint32_t
typedef unsigned int uint32_t;
#endif

#ifndef uint8_t
typedef unsigned char uint8_t;
#endif

Это ошибки:

In file included from F:/android_ws/stkeys/jni/stkeys.c:44:
F:/android_ws/stkeys/jni/sha1.h:23: error: redefinition of typedef 'uint32_t'
F:/android/android-ndk-r6/platforms/android-5/arch-arm/usr/include/stdint.h:53:
note: previous declaration of 'uint32_t' was here
F:/android_ws/stkeys/jni/sha1.h:27: error: redefinition of typedef 'uint8_t'
F:/android/android-ndk-r6/platforms/android-5/arch-arm/usr/include/stdint.h:49:
note: previous declaration of 'uint8_t' was here

Я получил его для компиляции, комментируя определения uint32_t и т. Д. В stdint.h, но это не может быть решением.Это ошибка в NDK, или я здесь что-то не так делаю?

1 Ответ

2 голосов
/ 14 августа 2011

Очевидно, он не ожидает включения stdint.h.Не знаю почему.

Тест #ifndef работает только для тестирования, если что-то было #define d.Нет способа сделать typedef с условно.

Я бы лучше взломал код приложения, чем стандартные заголовки.: -)

...