Компиляция кода C ++ с помощью cygwin для JNI (Android NDK) - PullRequest
2 голосов
/ 02 декабря 2010

Я пытаюсь создать файл C ++ для использования в моем приложении Android через JNI.Я строю в Windows, используя Cygwin.Я совершенно новичок в этом и не знаю, что я делаю.

Вот часть вывода:

$ 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'

Не могли бы вы дать мне руку?

Эммануэль

Ответы [ 5 ]

1 голос
/ 02 декабря 2010

Приложения, созданные в среде Cygwin , предполагают, что приложение будет выполняться в Windows с доступной библиотекой Cygwin DLL. Как сказал yock, вам нужно настроить кросс-компилятор, предназначенный для операционной системы Android.

0 голосов
/ 31 января 2011

Ответом было просто создать файл Android.mk и использовать команду ndk-build.

0 голосов
/ 12 декабря 2010

Для компиляции исходного кода вы должны использовать версию androis gcc. Использование инструментов ndk-build и NDK.

Если вы просто хотите избавиться от «уже определенной» ошибки, сначала удалите ее, чтобы убедиться, что ваша версия используется:

#undef size_t
#undef ptrdiff_t
0 голосов
/ 02 декабря 2010

То, что вы пытаетесь сделать с cygwin, не будет работать по причинам, указанным в ответе Дэвида Харрриса.

Вы можете получить (правильный) кросс-компилятор, который работает в Windows здесь .В Android NDK также есть компилятор C / C ++, который вы можете найти здесь

0 голосов
/ 02 декабря 2010

Я вообще не эксперт по C / C ++, но мне кажется, что вы пытаетесь скомпилировать для Arm компилятор, ориентированный на i686. Недостаточно просто указать нужные заголовочные файлы, чтобы указать GCC нацелиться на арку, вам нужен кросс-компилятор.

http://wiki.osdev.org/GCC_Cross-Compiler

...