如何为iOS编译Spatialite

5

我是新来的,这是我的第一个话题。我在iOS平台上很新,并且正在尝试使用sqlite3的空间扩展,但我无法做到这一点。这让我发疯了。我不知道从哪里开始。有人可以给我建议吗?

谢谢。


你目前尝试了什么?我找到了这个,可能会有帮助:http://groups.google.com/group/spatialite-users/browse_thread/thread/f3b5941da7eded8d?pli=1 - badgerr
谢谢您的回复。我之前看过这个链接,但是并没有完全理解。我只是想将spatialite库添加到我的项目中并加载它。然而,当我尝试使用.load 'SpatiaLite.dylib'加载时,它说找不到这样的加载项。首先我需要什么?我想在数据库中放置一个小区域,并且可以离线查找该区域上的位置。 - Nacrug
iPhone不支持动态库。您需要将任何要包含的框架构建为静态库。这个问题可能会对您有所帮助:为iPhone应用编译自定义SQLite - Brad Larson
谢谢你的帮助。实际上,我已经明白了如何为iOS编译。然而,在我使用的Mac OS上构建或安装Spatialite存在问题,我正在处理中。再次感谢。 - Nacrug
4个回答

13

我就是在http://上分享库的那个人 ;-) 我在iOS上简化了Spatialite的集成,取得了一些进展。 现在我能够构建一个完全独立的静态库,其中包含所需的GEOS和PROJ,无需处理它们,版本为2.3.1。

只需下载zip文件http://lionel.gueganton.free.fr/spatialite/spatialite2.3.1.zip,您将获得x86和arm的.a文件+头文件,以便您可以直接从这些头文件使用Spatialite接口。

一旦你拖放了.a文件(两个文件都需要在模拟器和真实硬件上工作),你只需调用spatialite_init(1)就可以初始化Spatialite。

以下内容应显示在控制台日志中:

SpatiaLite version ..: 2.3.1  支持扩展:
    - 'VirtualShape'    [直接访问Shapefile]
    - 'VirtualText      [直接CSV/TXT访问]
    - 'VirtualNetwork   [Dijkstra最短路径]
    - 'RTree'       [空间索引-R * Tree]
    - 'MbrCache'        [空间索引-MBR缓存]
    - 'VirtualFDO'      [FDO-OGR互操作性]
    - 'SpatiaLite'      [空间SQL-OGC]
PROJ.4 version ......: Rel. 4.6.1,2008年8月21日
GEOS version ........: 3.1.1-CAPI-1.6.0


非常感谢你,yonel。我几乎为得到这个答案的分数而感到内疚 :-( 。当然,我会直接获取你的二进制文件的副本。再次感谢。 - Big Rich
请把我的分数还给我!;) 我开玩笑的:) 如果你有机会试一试它们,我真的很想听听你的反馈。正如弗拉德在回答中所说,你需要将stdlib++.dylib添加到Xcode项目中,因为GEOS(它是.a的一部分)是使用std lib的C++代码。干杯! - yonel
嗨,是的,静态库.aggregates spatialite + PROJ和GEOS。我认为,不直接被spatialite使用的符号会在构建过程中被排除,但我不能保证100%:/ - yonel
1
嗯,自那篇文章以来,Spatialite 已经有所发展。版本 3.0.0 已经发布一段时间了,因此我建议您检查一下这个版本。此外,为什么您想要不包含 PROJ 和 GEOS 的 Spatialite?如果没有这两个项目,Spatialite 对您来说并没有太多用处,对吧? - yonel
在XCode 4.6中,我收到了链接器错误:文件是通用的(2个片段),但不包含armv7s片段: - tmanthey
显示剩余5条评论

3

快来看看,热乎的新闻!

大师们,这个人的Google技能很强!

我没有写这个(我计划很快为iPhone SQLite和Spatialite编写CMake脚本),但我建议你们在404之前去这个网站看看:

http://lionel.gueganton.free.fr/spatialite/

去下载一些好东西吧,包括预编译的Spatialite +扩展2.3.1二进制文件!

有一个SQLite-on-OSX Cmake脚本(最初在这里找到),可能只需要很少的修改就可以重新定位到SQLite-iPhone构建上(我会做到的,只要我有时间)。这应该允许您使用最新的SQLite版本(我读过苹果提供的版本稍微受限)。然后,据说只需以本地方式引用的头文件,即使用引号

(例如“sqllitexxx.h”)

而不是使用尖括号:

<sqllitexoldx.h>

那么,我得到了这些丰厚的积分吗?;-)

干杯

大富翁


1

你可能需要编译成armv7目标(优化构建),还应链接stdlib++.dylib。


1

iOS上的Spatialite,只需3个简单步骤:

  1. https://github.com/gstf/libspatialite-ios获取Makefile和补丁文件。
  2. 键入make命令。
  3. 没有第三步。

感谢Gustaf Lindqvist提供此资源!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接