2012-06-25 102 views
3

我有一個小麻煩與構建現有的項目在:Spatialite爲Android NDK構建

http://code.google.com/p/spatialite-android/ 

我使用的Win7和Cygwin

我通過使用「GIT的Windows克隆獲得源代碼」。將其放置到:C:\ TEMP \ ECLIPSE \工作區\ SA1

我下載了以下內容:

我把這些在:C:\ TEMP \ ECLIPSE \ workspace \ SA1 \ spatialite-android-library \ jni

然後啓動Cygwin並執行以下操作:

$ cd c:/temp/eclipse/workspace/sa1/spatialite-android-library/jni 
$ tar xvjf geos-3.2.2.tar.bz2 
$ cd geos-3.2.2 
$ ./configure --build=x86_64-pc-linux-gnu --host=arm-linux-eabi 

在Cygwin之外,我在一個編輯器中打開:C:\ temp \ ECLIPSE \ workspace \ SA1 \ spatialite-android-library \ jni \ geos-3.2.2 \ source \ headers \ geos \ platform.h 並作出一些改動使其類似於下面

/* Set to 1 if you have `int64_t' type */ 
/* #undef HAVE_INT64_T_64 */ 

/* Set to 1 if `long int' is 64 bits */ 
/* #undef HAVE_LONG_INT_64 */ 

/* Set to 1 if `long long int' is 64 bits */ 
/* #undef HAVE_LONG_LONG_INT_64 */ 

/* Set to 1 if you have ieeefp.h */ 
/* #undef HAVE_IEEEFP_H */ 

/* Has finite */ 
#define HAVE_FINITE 1 

/* Has isfinite */ 
/* #undef HAVE_ISFINITE */ 

/* Has isnan */ 
#define HAVE_ISNAN 1 

保存並關閉

然後我回去Cygwin和執行以下操作:

$ cd .. 
$ tar xvzf proj-4.7.0.tar.gz 
$ cd proj-4.7.0 
$ ./configure --build=x86_64-pc-linux-gnu --host=arm-linux-eabi 
$ cd .. 
$ /cygdrive/c/android-ndk-r8/ndk-build 

沿與++編譯線以下編譯

StaticLibrary : libiconv.a 
StaticLibrary : libproj.a 

但是同時它會通過GEOS談到了以下錯誤:

Compile++ thumb : geos <= TaggedLineSegment.cpp 
Compile++ thumb : geos <= TaggedLinesSimplifier.cpp 
Compile++ thumb : geos <= TaggedLineString.cpp 
Compile++ thumb : geos <= TaggedLineStringSimplifier.cpp 
Compile++ thumb : geos <= TopologyPreservingSimplifier.cpp 
Compile++ thumb : geos <= Assert.cpp 
Compile++ thumb : geos <= GeometricShapeFactory.cpp 
Compile++ thumb : geos <= math.cpp 
Compile++ thumb : geos <= Profiler.cpp 
Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/libs/armeabi/ 
StaticLibrary : libgeos.a 
make: execvp: /cygdrive/c/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar: Argument list too long 
make: *** [/cygdrive/c/temp/eclipse/workspace/sa1/spatialite-android-library/obj/local/armeabi/libgeos.a] Error 127 
[email protected] /cygdrive/c/temp/eclipse/workspace/sa1/spatialite-android-library/jni 
$ 

有人可以與我如何可以解決此幫助?任何幫助非常感謝!

回答

0

這似乎是NDK的問題。當提供的參數列表太長時,會發生此錯誤。通常這可以使用選項文件修復。請參閱arm-linux-androideabi-ar的@參數。

在互聯網上搜索似乎這個問題已經報告給谷歌。唯一的解決方法是使用Ubuntu VM來編譯本機代碼。

1

嘗試將以下內容添加到makefile中。

LOCAL_SHORT_COMMANDS := true 
3

該問題可以通過縮短ndk和spatialite-android文件夾的路徑來解決。

我將ndk移至c:\ cygwin文件夾,並將其從android-ndk-r8b重命名爲ndk。 同樣讓我感動了android-spatialite文件夾複製到C:\ Cygwin和重新命名爲SLA

然後cd到/ SLA/spatialite-的Android庫/ JNI文件夾,運行/ NDK/NDK-建立-j8

並編譯:)