我正在尝试构建一个C ++文件,以便在我的Android应用程序中使用JNI。我正在使用Cygwin在Windows中构建。我对此完全陌生,不知道我在做什么。
以下是输出的一部分:
$ g++ -c test_wrap.cxx -I"C:\dev\android-ndk-r4b\build\platforms\android-4\arch-arm\usr\include" -I./include
In file included from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/sys/_types.h:40,
from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/stdint.h:32,
from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/sys/types.h:34,
from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/strings.h:42,
from C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/stdlib.h:42,
from test_wrap.cxx:160:
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:44: error: conflicting declaration 'typedef long unsigned int size_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:213: error: 'size_t' has a previous declaration as `typedef unsigned int size_t'
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:44: error: declaration of `typedef long unsigned int size_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:213: error: conflicts with previous declaration `typedef unsigned int size_t'
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:44: error: declaration of `typedef long unsigned int size_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:213: error: conflicts with previous declaration `typedef unsigned int size_t'
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:46: error: conflicting declaration 'typedef long int ptrdiff_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:151: error: 'ptrdiff_t' has a previous declaration as `typedef int ptrdiff_t'
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:46: error: declaration of `typedef long int ptrdiff_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:151: error: conflicts with previous declaration `typedef int ptrdiff_t'
C:/dev/android-ndk-r4b/build/platforms/android-4/arch-arm/usr/include/machine/_types.h:46: error: declaration of `typedef long int ptrdiff_t'/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/stddef.h:151: error: conflicts with previous declaration `typedef int ptrdiff_t'
你可以帮我一把吗?
灵光
答案 0 :(得分:1)
在Cygwin环境中构建的应用程序假定应用程序将在Windows上执行并且Cygwin DLL可用。正如yock所说,您需要设置针对Android操作系统的交叉编译器。
答案 1 :(得分:0)
我根本不是C / C ++专家,但在我看来,你正在尝试使用针对i686的编译器为Arm编译。只包含你想要的头文件并不足以告诉GCC定位一个arch,你需要一个交叉编译器。
答案 2 :(得分:0)
由于David Harrris的回答中所述的原因,您尝试使用cygwin所做的事情是行不通的。
您可以获得在Windows here中运行的(正确的)交叉编译器。 Android NDK中还包含一个C / C ++编译器,您可以找到here
答案 3 :(得分:0)
您应该使用androis gcc版本来编译源代码。使用ndk-build和NDK构建工具。
如果您只是想摆脱“已定义”错误,请先取消定义,以确保您的版本得到使用:
#undef size_t
#undef ptrdiff_t
答案 4 :(得分:0)
答案只是创建一个Android.mk文件并使用ndk-build命令。