NDK:尚未声明 我正在使用Android原生库NDK编译C++代码,但是在试图将文件包含在:时,我会遇到以下错误

NDK:尚未声明 我正在使用Android原生库NDK编译C++代码,但是在试图将文件包含在:时,我会遇到以下错误,c++,android-ndk,java-native-interface,C++,Android Ndk,Java Native Interface,错误: Compile++ arm : g729_jni <= g729_jni.cpp /usr/src/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/g729_jni/g729_jni.o.d -fpic -ffunction-sections -

错误:

Compile++ arm    : g729_jni <= g729_jni.cpp
/usr/src/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/g729_jni/g729_jni.o.d -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 -fno-exceptions -fno-rtti -O2 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -I/usr/src/android-ndk-r8/sources/cxx-stl/system/include -Ijni -DANDROID -O3 -Wa,--noexecstack   -O2 -DNDEBUG -g   -I/usr/src/android-ndk-r8/platforms/android-3/arch-arm/usr/include -c  jni/g729_jni.cpp -o ./obj/local/armeabi/objs/g729_jni/g729_jni.o 


In file included from jni/g729_jni.cpp:34:
jni/g729/g729a.h:70: error: 'UWord8' has not been declared
jni/g729/g729a.h:126: error: 'UWord8' has not been declared
jni/g729_jni.cpp: In function 'jint Java_org_sipdroid_codecs_G729_open(JNIEnv*, _jobject*)':
jni/g729_jni.cpp:72: error: 'UWord8' was not declared in this scope
jni/g729_jni.cpp: In function 'jint Java_org_sipdroid_codecs_G729_encode(JNIEnv*, _jobject*, _jshortArray*, jint, _jbyteArray*, jint)':
jni/g729_jni.cpp:111: error: 'UWord8' was not declared in this scope
jni/g729_jni.cpp:111: error: expected ';' before 'serial'
jni/g729_jni.cpp:125: error: 'serial' was not declared in this scope
jni/g729_jni.cpp: In function 'jint Java_org_sipdroid_codecs_G729_decode(JNIEnv*, _jobject*, _jbyteArray*, _jshortArray*, jint)':
jni/g729_jni.cpp:156: error: cannot convert 'unsigned char*' to 'int*' for argument '2' to 'void g729a_dec_process(void*, int*, Word16*, Flag)'
make: *** [obj/local/armeabi/objs/g729_jni/g729_jni.o] Error 1
[root@localhost sipdroid-read-only]# /usr/src/android-ndk-r8/ndk-build V=1 APP_ABI=armeabi APP_PROJECT_PATH=. obj/local/armeabi/objs/g729_jni/g729_jni.o
make: `obj/local/armeabi/objs/g729_jni/g729_jni.o' is up to date.

确保您的typedef.h与

以下是我为重现您的问题所做的步骤:

svn checkout http://sipdroid.googlecode.com/svn/trunk/ sipdroid
cd sipdroid
sed "s/^SILK/include $(CLEAR_VARS)\\nSILK/" -i jni/Android.mk
(注意Android.mk需要在第89行之后进行修复)


。。。您的文件编译时会出现一个小警告。您做了哪些不同的操作?

请使用参数V=1运行ndk build以响应命令,并发布导致报告错误的编译步骤。@AlexCohn我已更新错误。哦,复制/粘贴中的错误。删除
.cmd
,因为我在回答中已经修复了(
ndk build.cmd
用于Windows)。如果您看到
g729\u jni.o是最新的。
,则您以前的构建成功。您可以随时运行
ndk build clean
并重试。这很好,但我仍然收到相同的消息
g729_jni.o是最新的
并且在Android.mk的第89行之后需要什么修复。抱歉,我误解了您的最后一条评论。当然,我遵循了你的建议和步骤。这对我有帮助。是的,实际上我使用虹吸的来源,我刚刚添加了一个新的文件,它是G729 A.Huy,包括在Java/G729/G729 A。外部的“C”中,但是文件本身是C++的。试着用这个#include从g729_jni的外部“C”括号中移出。cppi试着用这个#include“g729/g729a.h”从外部“C”移出,得到了更多的错误。这很奇怪。。对我来说,这一切都很有魅力。。。请参阅更新的答案,以了解逐步说明。在某些地方,我们做的事情不同……非常感谢您的支持,我会尝试一下,如果发现任何问题,我会告诉您。是的,我已经从ITU官方网站下载了g729源代码,但是在g729a.h文件中没有,所以我使用了虹吸的g729a.h文件。
svn checkout http://siphon.googlecode.com/svn/trunk/ ../siphon
cp -d ../siphon/g729a/Headers/ jni/g729
wget http://pastie.org/pastes/4737332/download -O jni/g729/g729a.h
wget "http://sipdroid.googlecode.com/issues/attachment?aid=7963991223373796529&name=g729_jni.cpp&token=KHEZCoq6ZYSuV_VhsV8fC3uwsSs%3A1348058591979" -O jni/g729_jni.cpp
sed -e "s/g722_jni/g729_jni/" -i jni/Android.mk
ndk-build.cmd V=1 APP_ABI=armeabi APP_PROJECT_PATH=. obj/local/armeabi/objs/g729_jni/g729_jni.o