5 votos

"libSFCGAL.so.1: símbolo indefinido" al actualizar a Postgis 2.2.2 (y 2.2.1)

Recientemente he actualizado PostGIS a la versión 2.2.2. Me gustaría actualizar una base de datos heredada a esta nueva versión, ejecutando esta consulta:

alter extension postgis update to "2.2.2"

El resultado es este error:

ERROR: could not load library "/usr/lib/postgresql/9.3/lib/postgis-2.2.so": /usr/lib/x86_64-linux-gnu/libSFCGAL.so.1: undefined symbol: _ZN5osgDB13writeNodeFileERKN3osg4NodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKNS_7OptionsE
    SQL state: 58P01

Tengo la biblioteca SFCGAL instalada con cabeceras y símbolos de depuración:

$ dpkg -l | grep sfcgal
ii  libsfcgal-dev                                               1.2.2-1                                                     amd64        Library for ISO 19107:2013 and OGC SFA 1.2 for 3D operations (dev part)
ii  libsfcgal1                                                  1.2.2-1                                                     amd64        Library for ISO 19107:2013 and OGC SFA 1.2 for 3D operations (runtime part)
ii  sfcgal-bin                                                  1.2.2-1                                                     amd64        Simple viewer for SFCGAL library
ii  sfcgal-dbg                                                  1.2.2-1                                                     amd64        Debug symbols for SFCGAL

¿Cómo puedo superar esto?

Actualización

No he podido encontrar una fuente de paquete para una versión más reciente de la biblioteca SFCGAL. Por lo tanto, decidí reinstalar la pila de software desde un único repositorio, el PPA de UbuntuGIS . Ahora tengo la siguiente configuración:

  • postgresql-9.5
  • postgresql-9.5-postgis-2.2 (2.2.1+dfsg-3~xenial0)
  • postgis (2.2.1+dfsg-3~xenial0)
  • libsfcgal1 (1.2.2-1)

Pero con esta nueva configuración me da el mismo error:

# CREATE EXTENSION postgis;
ERROR:  could not load library "/usr/lib/postgresql/9.5/lib/postgis-2.2.so": /usr/lib/x86_64-linux-gnu/libSFCGAL.so.1: undefined symbol: _ZN5osgDB13writeNodeFileERKN3osg4NodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKNS_7OptionsE

4voto

Eyal Puntos 188

En la lista de correo de UbuntuGIS apareció una referencia a los paquetes OpenSceneGraph (también en el comentario de vmora ). Resulta que el paquete de cabeceras de esta biblioteca no estaba instalado:

$ aptitude search libopenscenegraph
p   libopenscenegraph-dev                                                      - 3D scene graph, development files                                                    
p   libopenscenegraph-dev:i386                                                 - 3D scene graph, development files                                                    
i   libopenscenegraph100v5                                                     - 3D scene graph, shared libs                                                          
p   libopenscenegraph100v5:i386                                                - 3D scene graph, shared libs                                                          
c   libopenscenegraph99                                                        - 3D scene graph, shared libs            

Después de instalar el libopenscenegraph-dev paquete puedo volver a utilizar PostGIS. Como se sugiere en la lista de mailling, la versión correcta de este paquete también es proporcionada por el PPA de UbuntuGIS:

$ apt policy libopenscenegraph-dev
libopenscenegraph-dev:
  Installed: 3.2.3+dfsg1-1~xenial0
  Candidate: 3.2.3+dfsg1-1~xenial0
  Version table:
 *** 3.2.3+dfsg1-1~xenial0 500
        500 http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     3.2.1-7ubuntu4 500
        500 http://ch.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages

1voto

Albate Puntos 21
$ echo _ZN5osgDB13writeNodeFileERKN3osg4NodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKNS_7OptionsE |c++filt
osgDB::writeNodeFile(osg::Node const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, osgDB::Options const*)

Parece que te falta un símbolo de openscenegraph.

¿Podría proporcionar el resultado de:

ldd /usr/lib/x86_64-linux-gnu/libSFCGAL.so

1voto

altblue Puntos 639

No necesitas el libopenscenegraph-dev paquete para libsfcgal1 El libopenscenegraph100v5 & libopenthreads20 (del PPA de UbuntuGIS) son suficientes.

Los paquetes -dev sólo son necesarios para construir el software que enlaza con esas bibliotecas.

Los paquetes de OpenSceneGraph en el PPA de UbuntuGIS han sido reconstruidos con los nuevos paquetes de GDAL en el PPA. Por eso necesitas esos en lugar de los del repositorio principal de xenial.

0voto

yo_man Puntos 111

En caso de que alguien se enfrente al siguiente error

ERROR:  could not load library "/usr/pgsql-12/lib/postgis-3.so": /lib64/libSFCGAL.so.1: undefined symbol: _ZN5boost7archive18text_iarchive_implINS0_13text_iarchiveEE4loadERSs

Actualizar el paquete boost-serialization yum puede ayudar.

Gracias a la respuesta de @vmora, me dio una pista y pude solucionar este problema ejecutando

yum install -y http://mirror.centos.org/centos/7/os/x86_64/Packages/boost-serialization-1.53.0-28.el7.x86_64.rpm

Espero que ayude a alguien :)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X