Skip to content

Example cpp_read fails at linker on Ubuntu 22.04 #760

@MissingBracket

Description

@MissingBracket

Please review whether available library is properly compiled and provided examples are adequate to available version.

Project cpp_read failes during linker phase with output :

/usr/bin/ld: /tmp/ccpI2Ms1.o: in function main': geomtry.cpp:(.text+0x4e): undefined reference to geos::io::WKTReader::WKTReader(geos::geom::GeometryFactory const&)'
/usr/bin/ld: geomtry.cpp:(.text+0x296): undefined reference to geos::io::WKTReader::~WKTReader()' /usr/bin/ld: geomtry.cpp:(.text+0x380): undefined reference to geos::io::WKTReader::~WKTReader()'
collect2: error: ld returned 1 exit status

Compiled with g++ cpp_read.cpp -lgeos

I am on Ubuntu 22.04 with, as of time of writing, up-to-date libgeos and libgeos++-dev packages installed :

$ apt list --installed | grep libgeos

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libgeos++-dev/jammy,now 3.10.2-1 amd64 [installed]
libgeos-c1v5/jammy,now 3.10.2-1 amd64 [installed,automatic]
libgeos-dev/jammy,now 3.10.2-1 amd64 [installed,automatic]
libgeos3.10.2/jammy,now 3.10.2-1 amd64 [installed,automatic]

On my older machine with geos 3.8.0 installed everything works fine.

While digging with readelf and nm I found out that there might be missing definitions for constructor and destructor declarations.
Output for geos.so.3.8.0:
$ nm --print-file-name --dynamic /usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so | grep -i wktreader

/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000104830 T _ZN4geos2io9WKTReader11getNextWordB5cxx11EPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000001046a0 T _ZN4geos2io9WKTReader12isNumberNextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000104fe0 T _ZN4geos2io9WKTReader13getNextCloserB5cxx11EPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000001046c0 T _ZN4geos2io9WKTReader13getNextNumberEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000105040 T _ZN4geos2io9WKTReader13readPointTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000104be0 T _ZN4geos2io9WKTReader14getCoordinatesEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000105c30 T _ZN4geos2io9WKTReader15readPolygonTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000001051d0 T _ZN4geos2io9WKTReader18readLinearRingTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000105150 T _ZN4geos2io9WKTReader18readLineStringTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000105250 T _ZN4geos2io9WKTReader18readMultiPointTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000104b60 T _ZN4geos2io9WKTReader20getNextCloserOrCommaB5cxx11EPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000001049b0 T _ZN4geos2io9WKTReader20getNextEmptyOrOpenerB5cxx11EPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000104760 T _ZN4geos2io9WKTReader20getPreciseCoordinateEPNS0_15StringTokenizerERNS_4geom10CoordinateERm
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000106440 T _ZN4geos2io9WKTReader20readMultiPolygonTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000106cc0 T _ZN4geos2io9WKTReader22readGeometryTaggedTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000106160 T _ZN4geos2io9WKTReader23readMultiLineStringTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000001069e0 T _ZN4geos2io9WKTReader26readGeometryCollectionTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000106f00 T _ZN4geos2io9WKTReader4readERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985b0 T _ZN4geos2io9WKTReaderC1EPKNS_4geom15GeometryFactoryE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985d0 T _ZN4geos2io9WKTReaderC1ERKNS_4geom15GeometryFactoryE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985f0 T _ZN4geos2io9WKTReaderC1Ev
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985b0 T _ZN4geos2io9WKTReaderC2EPKNS_4geom15GeometryFactoryE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985d0 T _ZN4geos2io9WKTReaderC2ERKNS_4geom15GeometryFactoryE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985f0 T _ZN4geos2io9WKTReaderC2Ev
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000098610 T _ZN4geos2io9WKTReaderD1Ev
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000098610 T _ZN4geos2io9WKTReaderD2Ev

Output for geos.3.10.2 :
$ nm --print-file-name --dynamic /usr/lib/x86_64-linux-gnu/libgeos.so | grep -i wktreader

/usr/lib/x86_64-linux-gnu/libgeos.so:00000000001092e0 T _ZN4geos2io9WKTReader11getNextWordB5cxx11EPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000106b30 T _ZN4geos2io9WKTReader12isNumberNextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:000000000010a940 T _ZN4geos2io9WKTReader13getNextCloserB5cxx11EPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000109190 T _ZN4geos2io9WKTReader13getNextNumberEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000109640 T _ZN4geos2io9WKTReader20getNextCloserOrCommaB5cxx11EPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000109450 T _ZN4geos2io9WKTReader20getNextEmptyOrOpenerB5cxx11EPNS0_15StringTokenizerERm
/usr/lib/x86_64-linux-gnu/libgeos.so:000000000010a9a0 T _ZNK4geos2io9WKTReader13readPointTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:00000000001096c0 T _ZNK4geos2io9WKTReader14getCoordinatesEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000109bf0 T _ZNK4geos2io9WKTReader15readPolygonTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000109b70 T _ZNK4geos2io9WKTReader18readLinearRingTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000109af0 T _ZNK4geos2io9WKTReader18readLineStringTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:000000000010aad0 T _ZNK4geos2io9WKTReader18readMultiPointTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000109220 T _ZNK4geos2io9WKTReader20getPreciseCoordinateEPNS0_15StringTokenizerERNS_4geom10CoordinateERm
/usr/lib/x86_64-linux-gnu/libgeos.so:000000000010a400 T _ZNK4geos2io9WKTReader20readMultiPolygonTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:000000000010b3c0 T _ZNK4geos2io9WKTReader22readGeometryTaggedTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:000000000010a130 T _ZNK4geos2io9WKTReader23readMultiLineStringTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:000000000010b600 T _ZNK4geos2io9WKTReader26readGeometryCollectionTextEPNS0_15StringTokenizerE
/usr/lib/x86_64-linux-gnu/libgeos.so:0000000000105250 T _ZNK4geos2io9WKTReader4readERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

Please note shorter output and lack of definitions

/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985f0 T _ZN4geos2io9WKTReaderC1Ev
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985b0 T _ZN4geos2io9WKTReaderC2EPKNS_4geom15GeometryFactoryE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985d0 T _ZN4geos2io9WKTReaderC2ERKNS_4geom15GeometryFactoryE
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:00000000000985f0 T _ZN4geos2io9WKTReaderC2Ev
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000098610 T _ZN4geos2io9WKTReaderD1Ev
/usr/lib/x86_64-linux-gnu/libgeos-3.8.0.so:0000000000098610 T _ZN4geos2io9WKTReaderD2Ev

Are there any additional steps I am not aware of? Has anything changed and somehow skipped the documentation update?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions