0

我在Windows上使用NDK-r6,想编译一个简单的程序用于测试目的。 只编译一个C控制台程序不是那么容易,但我得到了所需的选项。 我使用的命令行(在Cygwin的):Android NDK C#ifndef问题

/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 

我得到了它在stdint.h注释掉的uint32_t的等的定义进行编译,但可以不是解决办法。 这是NDK中的错误,还是我在这里做错了什么?

+0

这是我拥有代码的路径。这不是真正的jni代码。那里只有stkeys.c sha1.c和sha1.h文件 – Josef

回答

2

它显然不期望包含stdint.h。不知道为什么。

测试#ifndef仅适用于测试是否有某种情况#define d。没有办法有条件地做typedef

我宁愿破解应用程序代码,而不是标准的头文件。 :-)