将 Ubuntu 从 16.04 升级到 16.10 后,每当我尝试执行与 postgis 相关的任何操作时,我都会收到此错误:
could not load library "/usr/lib/postgresql/9.5/lib/postgis-2.2.so": libboost_thread.so.1.58.0: cannot open shared object file: No such file or directory
我没有,libboost_thread.so.1.58.0
但我有libboost_thread.so.1.61.0
位于/usr/lib/x86_64-linux-gnu/
。我想也许删除扩展并重新安装 postgis 会起作用,但这似乎没有任何改变。现在,当我尝试时,CREATE EXTENSION postgis;
我得到了同样的错误。
输出ldd /usr/lib/postgresql/9.5/lib/postgis-2.2.so | grep libboost
:
libboost_thread.so.1.58.0 => not found
libboost_system.so.1.58.0 => not found
libboost_serialization.so.1.58.0 => not found
和ldconfig -p | grep -E "libboost_(thread|system|serialization)"
:
libboost_thread.so.1.61.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.61.0
libboost_thread.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_thread.so
libboost_system.so.1.61.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.61.0
libboost_system.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_system.so
libboost_serialization.so.1.61.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.61.0
libboost_serialization.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_serialization.so
我尝试使用LD_PRELOAD
,正确的版本出现在 中ldd
,但执行时仍要求1.58.0
。我没有1.58.0
在机器上找到任何安装的版本,甚至在默认存储库中也不可用。
答案1
事实证明,/usr/local/lib
我有一些.so
与 sfcgal(postgis 依赖项)相关的文件,这些文件是在升级之前构建的,当时我仍在使用旧版本的 boost。此目录必须优先于正确的目录,因此它试图链接到旧的 boost。
我认为这只对那些在某个时候从源代码构建 sfcgal 但并未清理所有内容的人来说是个问题。