【发布时间】:2016-04-05 14:31:52
【问题描述】:
我在使用 Android NDK(第一次)和编译一个简单的 C 文件时遇到了一些问题。奇怪的是,我在标准头文件本身上得到了这些编译错误,除非我没有包含所有包含文件,否则我希望在这些文件中不会产生错误。这就是我所做的......
javac myJavaFile.java
javah -d location/include location.MyJavaFile
这运行良好并创建了适当的头文件。然后我在关联的 C 文件上运行 android ndk C 编译器,但在标准头文件中出现错误。我的命令如下(为了可读性缩短了绝对路径)
...android-ndk-r11c-windows-x86_64\android-ndk-r11c\toolchains\x86_64-4.9\prebuilt\
windows-x86_64\bin\x86_64-linux-android-gcc.exe -I ...jdk1.6.0_35\include -I
...android-ndk-r11c-windows-x86_64\android-ndk-r11c\platforms\android-18\arch-x86\usr\
include -I ...jdk1.6.0_35\include\win32 -c myCFile.c
执行此操作时出现以下生成的错误:
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:621:25: error: expected ')' before '*' token
jcharArray (JNICALL *NewCharArray)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:623:26: error: expected ')' before '*' token
jshortArray (JNICALL *NewShortArray)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:625:24: error: expected ')' before '*' token
jintArray (JNICALL *NewIntArray)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:627:25: error: expected ')' before '*' token
jlongArray (JNICALL *NewLongArray)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:629:26: error: expected ')' before '*' token
jfloatArray (JNICALL *NewFloatArray)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:631:27: error: expected ')' before '*' token
jdoubleArray (JNICALL *NewDoubleArray)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:634:25: error: expected ')' before '*' token
jboolean * (JNICALL *GetBooleanArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:636:22: error: expected ')' before '*' token
jbyte * (JNICALL *GetByteArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:638:22: error: expected ')' before '*' token
jchar * (JNICALL *GetCharArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:640:23: error: expected ')' before '*' token
jshort * (JNICALL *GetShortArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:642:21: error: expected ')' before '*' token
jint * (JNICALL *GetIntArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:644:22: error: expected ')' before '*' token
jlong * (JNICALL *GetLongArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:646:23: error: expected ')' before '*' token
jfloat * (JNICALL *GetFloatArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:648:24: error: expected ')' before '*' token
jdouble * (JNICALL *GetDoubleArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:651:19: error: expected ')' before '*' token
void (JNICALL *ReleaseBooleanArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include/jni.h:653:19: error: expected ')' before '*' token
void (JNICALL *ReleaseByteArrayElements)
^
C:\Program Files\Java\jdk1.6.0_35\include\win32/jni_md.h:11:19: error: expected declaration specifiers before '__declspec'
#define JNIEXPORT __declspec(dllexport)
那么我在这里做错了什么?错误的编译器?包含文件,jni.h 确实存在。我在 Windows 7 Pro 64 位上运行。
【问题讨论】:
标签: android c compiler-errors android-ndk header-files