首页 > 其他 > 详细

spatialie运行出错的解决办法

时间:2016-10-06 07:08:55      阅读:618      评论:0      收藏:0      [点我收藏+]

如果程序链接到spatialite出现以下错误:

lt-demo2: geos_ts_c.cpp:3657: int GEOSCoordSeq_setOrdinate_r(GEOSContextHandle_t, geos::geom::CoordinateSequence*, unsigned int, unsigned int, double): Assertion `0 != cs failed.
[1]    15401 abort (core dumped)  ./demo2

十有八九是因为spatialite依赖的库GEOS多线程出问题了,我碰到的情况是GEOS 3.5.0 + spatialite 4.3.0a。解决办法是下载spatialite 4.4.0-RC1的源码,用以下命令重新编译:

./configure --prefix=/usr --enable-libxml2  CPPFLAGS="$CPPFLAGS -DGEOS_USE_ONLY_R_API"

因为GEOS库几乎所有函数都有两个版本:非线程安全(不带‘_r‘,比较老)和线程安全(带‘_r‘)的版本。新版spatialite(4.4.0-RC1)编译也必须加上CPPFLAGS="$CPPFLAGS -DGEOS_USE_ONLY_R_API"这个选项才会调用线程安全的版本。

该问题我在macOS Homebrew和Archlinux官方源安装的版本里都遇到了,是个埋藏很深的雷。写在这里希望对后来者有所帮助。

ref: https://groups.google.com/forum/?hl=en&fromgroups=#!topic/spatialite-users/9-32tVQ-720

spatialie运行出错的解决办法

原文:http://www.cnblogs.com/victl/p/5933376.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!