在 OSX 上缺少 libgeos_c.so
Posted
技术标签:
【中文标题】在 OSX 上缺少 libgeos_c.so【英文标题】:missing libgeos_c.so on OSX 【发布时间】:2012-07-02 22:04:03 【问题描述】:我正在尝试安装 Postgis 以便在 OSX 上使用 GeoDjango。
为此,我首先完全卸载了 postgres,然后按照 GeoDjango 文档安装了所有内容:https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#homebrew
我做了以下事情:
brew update
brew upgrade
brew install postgresql
brew install postgis
brew install gdal
brew install libgeoip
当我运行我的 Django 项目时,我收到以下错误:
OSError at / dlopen(/usr/local/lib/libgeos_c.so, 6): image not found
我跑了
sudo find . -name "libgeos_c*"
得到:
./Library/Frameworks/GEOS.framework/Versions/3/unix/lib/libgeos_c.dylib
./Users/martin/opt/geos-3.3.0/capi/.deps/libgeos_c_la-geos_c.Plo
./Users/martin/opt/geos-3.3.0/capi/.deps/libgeos_c_la-geos_ts_c.Plo
./usr/local/Cellar/geos/3.3.3/lib/libgeos_c.1.dylib
./usr/local/Cellar/geos/3.3.3/lib/libgeos_c.a
./usr/local/Cellar/geos/3.3.3/lib/libgeos_c.dylib
./usr/local/Cellar/geos/3.3.4/lib/libgeos_c.1.dylib
./usr/local/Cellar/geos/3.3.4/lib/libgeos_c.a
./usr/local/Cellar/geos/3.3.4/lib/libgeos_c.dylib
./usr/local/Cellar/geos/3.3.5/lib/libgeos_c.1.dylib
./usr/local/Cellar/geos/3.3.5/lib/libgeos_c.a
./usr/local/Cellar/geos/3.3.5/lib/libgeos_c.dylib
./usr/local/lib/libgeos_c.1.dylib
./usr/local/lib/libgeos_c.a
./usr/local/lib/libgeos_c.dylib
如您所见,根本没有“.so”文件。有什么建议吗?
编辑:
无奈之下,我还安装了 KyngChaos 软件包并添加了以下设置:
GEOS_LIBRARY_PATH = '/Library/Frameworks/GEOS.framework/GEOS'
GDAL_LIBRARY_PATH = '/Library/Frameworks/GDAL.framework/GDAL'
GEOIP_LIBRARY_PATH = '/usr/local/Cellar/geoip/1.4.8/lib/libGeoIP.dylib'
这解决了问题。
【问题讨论】:
我确实在 Mac 上 brew install geos。但是我的机器上的 GEOS_LIBRARY_PATH 和你的不一样。你知道吗,在哪里可以找到?我尝试使用 find,但在我拥有读取权限的任何文件夹中都找不到 .so 文件。我没有 sudo 权限。 【参考方案1】:抱歉,KyngChaos 解决方案完全违背了使用自制软件的目的。
自制软件用户(至少对于这个用户)的答案是卸载geos
及其依赖项,然后重新安装geos
及其依赖项。
这对我有用:
brew uninstall geos gdal geoip libspatialite librasterlite spatialite-gui spatialite-tools
brew cleanup
brew install geos
brew install gdal geoip libspatialite librasterlite spatialite-gui spatialite-tools
brew cleanup
似乎某些geos
依赖项不同步了。
您可以通过跟踪返回的内容来验证需要安装的库:
python -c 'import _ctypes; _ctypes.dlopen("/usr/local/lib/libgdal.dylib")'
你会看到类似的东西
Reason: Incompatible library version: [some geos dependent library].dylib requires version X.X.X or later, but libgeos_c.1.8.0.dylib provides version X.X.X.
brew uninstall [some geos dependency]
brew install [some geos dependency]
brew cleanup
然后重新运行上述python
命令,问题将得到解决,或者它会显示另一个需要卸载/安装的依赖项。
【讨论】:
我想我已经接近了,现在得到 django.db.utils.OperationalError: could not access file "$libdir/postgis-2.1": No such file or directory, that python import test throws no错误。我不得不卸载 postgis,brew 卸载 postgis,然后使用 brew 再次安装。 花了几个小时后,终于救了我。【参考方案2】:我是这样解决的。
$ brew install postgresql
$ brew install postgis
$ brew install gdal
$ brew install libgeoip
然后在 Django 设置中设置:
GEOS_LIBRARY_PATH = '/usr/local/Cellar/geos/3.4.2/lib/libgeos_c.1.dylib'
然后它对我有用。
【讨论】:
【参考方案3】:installation instructions 似乎持有答案,即设置环境变量$GEOS_LIBRARY_PATH
。
【讨论】:
这为我指明了正确的方向。我忽略了文档的这一部分,因为首先它出现在 KyngChaos 部分(我关注的是 Homebrew 部分),其次它说:“如果您使用的是以前版本的 Django(如 1.0.2),那么您将不得不在您的设置中添加以下内容”,我使用的是 Django 1.4。出于绝望,我也尝试了 KyngChaos 路线,虽然它不会创建丢失的文件,但我可以通过一些额外的设置让它运行。【参考方案4】:这里也一样 - 按照指示安装所有内容后,我返回并添加了 KyngChaos 库,然后将三个导出语句添加到我的 ~/.bash_profile 中,如上所述。这解决了我的问题。
【讨论】:
【参考方案5】:我遇到了同样的问题,并且能够通过从 Homebrew 卸载 GDAL 并从 KyngChaos 安装 GDAL Complete 包来解决它:http://www.kyngchaos.com/software/frameworks
【讨论】:
以上是关于在 OSX 上缺少 libgeos_c.so的主要内容,如果未能解决你的问题,请参考以下文章
在OSX上通过PEAR安装的PhpDocumentor无法正常工作 - 缺少文件?
OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'l