android - 用于 Android NDK 构建的 Spatialite

标签 android android-ndk cygwin spatialite geos

我在构建现有项目时遇到了一些麻烦:

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

我正在使用 Win7 和 Cygwin

我通过使用“GIT for Windows”克隆获得源代码。放入:C:\temp\ECLIPSE\workspace\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

连同 Compile++ 行,以下编译

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
HFisher@Toshiba500 /cygdrive/c/temp/eclipse/workspace/sa1/spatialite-android-library/jni
$

有人可以帮我解决这个问题吗?非常感谢任何帮助!

最佳答案

这个问题可以通过缩短 ndk 和 spatialite-android 文件夹的路径来解决。

我将 ndk 移动到 c:\cygwin 文件夹并将其从 android-ndk-r8b 重命名为 ndk。 同样,我将 android-spatialite 文件夹移动到 c:\cygwin 并将其重命名为 sla

然后 cd 进入/sla/spatialite-android-library/jni 文件夹并运行/ndk/ndk-build -j8

它编译 :)

关于android - 用于 Android NDK 构建的 Spatialite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11185221/

相关文章:

c - JNI 函数在 android 上返回非法的 UTF 字符

java - 如何通过Android HAL创建环回相机?

iphone - 使用 Cygwin 为 WindowsXP 构建 iPhone

c++ - 如何从 Cygwin 构建 Visual Studio 9.0 解决方案并获取构建输出?

android - Android 部分 ListView 中缺少数据?

android - Android 中的文本到手语翻译

java - 如何在 JNI 中实例化一个类

c - 如何使用 Netbeans+ Cygwin 在 Windows 上清除 C 中的控制台?

java - 在 Android 中使用 Tabhost 设置选项卡时遇到问题?

android - 以编程方式定义线性布局