[geos-devel] Is GEOS 3.11 C-API upward compatible with GEOS 3.9.0

Regina Obe lr at pcorp.us
Sun Dec 5 16:33:24 PST 2021


> > So my PostGIS is compiled with GEOS 3.9.0, but it should work with
> > GEOS 3.11.
> 
> You presumably have swapped out the geos implementation?  How?
> 
[Regina Obe] 
I test PostGIS / PostgreSQL with a PostgreSQL launch script that sets the
path of all the key dependencies.
So I have a compiled (lots of other old geos) , GEOS 3.9.0, GEOS 3.10.0,
GEOS 3.10.1, GEOS 3.11 (main) all just different in bin path by the version.

So when I want to compare differences I compile PostGIS with the lowest
version I want to compare
And then switch the paths in my PG launch script and then start up
PostgreSQL again.

Ignore the windowishness of this script, pretend you see export and $ signs
instead
-- START SCRIPT --
SET OS_BUILD=64
SET GCC_TYPE=gcc81
SET MINGW=C:\ming%OS_BUILD%%GCC_TYPE%\mingw%OS_BUILD%
SET PROJECTS=C:\ming%OS_BUILD%%GCC_TYPE%\projects
SET GDAL_VER=3.3.3
#I change this
SET GEOS_VER=3.10.1
SET PGDATA=%~dp0\data
SET PGDATABASE=postgres
SET PGUSER=postgres
SET PGPORT=5451
: lots of other dependencies cut out to keep this shorter
@SET
PATH=%PROJECTS%\zlib\rel-zlib-%ZLIB_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%
\CGAL\rel-cgal-%CGAL_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\cgal\rel-sfcga
l-%SFCGAL_VER%w%OS_BUILD%%GCC_TYPE%\bin;%MINGW%\bin;%~dp0bin;%PROJECTS%\gdal
\rel-%GDAL_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\geos\rel-%GEOS_VER%w%OS_
BUILD%%GCC_TYPE%\bin;%PROJECTS%\rel-libiconv-%ICONV_VER%w%OS_BUILD%%GCC_TYPE
%\bin;%PROJECTS%\proj\rel-%PROJ_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\lib
xml\rel-libxml2-%LIBXML_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\curl\rel-cu
rl-%CURL_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\expat\rel-expat-%EXPAT_VER
%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\freexl\rel-freexl-%FREEXL_VER%w%OS_BUI
LD%%GCC_TYPE%\bin;%PROJECTS%\v8\%V8_VER%;%PROJECTS%\ssl\rel-openssl-%OPENSSL
_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\sqlite\rel-sqlite%SQLite_VER%w%OS_
BUILD%%GCC_TYPE%\bin;%PROJECTS%\protobuf\rel-%PROTOBUF_VER%w%OS_BUILD%%GCC_T
YPE%\bin;%PROJECTS%\pcre\rel-%PCRE_VER%w%OS_BUILD%%GCC_TYPE%\bin;%PROJECTS%\
lz4\rel-lz4-%LZ4_VER%w%OS_BUILD%%GCC_TYPE%\bin;%~dp0\bin

"%~dp0\bin\initdb" -E UTF8 -U postgres -A trust
"%~dp0\bin\pg_ctl" -D "%~dp0/data" -l logfile_%PGPORT% start

ECHO "Click enter to stop"
pause
"%~dp0\bin\pg_ctl" -D "%~dp0/data" stop -m fast
-- END SCRIPT --

> > ERROR:  could not load library
> >
"C:/ming64gcc81/projects/postgresql/rel/pg14w64gcc81/lib/postgis-3.2.dll":
> > The specified module could not be found.
> 
> Well, your real problem is that you are using windows!
> 
[Regina Obe]  
Is your other name Sandro.  I might not be able to tell you apart anymore :)

> That error doesn't show what couldn't be found, and I'd suggest the
equivalent
> of objdump and ldd.
> 
> But seriously, that doesn't sound right.
> 
> One issue is that the c library has a (on POSIX) DT_NEEDED for the C++,
and
> sometimes (libtool?) when building a program that links with libgeos_c,
the
> libraries that libgeos_c depend on are also added at DT_NEEDED to the
> program.
[Regina Obe] 
You solved the problem :)

Ldd Shows this:
ldd /projects/postgresql/rel/pg14w64gcc81/lib/postgis-3.2.dll
        :
        ucrtbase.dll => /c/Windows/System32/ucrtbase.dll (0x7ff966af0000)
        libgeos_c.dll => not found
        :

and I see the newer GEOS from 3.10.1 on  have the file called
libgeos_c-1.dll
copying libgeos_c-1.dll back to the original name of libgeos_c.dll 
fixed the issue.

I also notice I am back to having this ugly libgeos-3.10.1.dll
that I was so happy to get rid of when I had switched my geos building from
autotools to CMake years ago.
In GEOS 3.10.0 the c++ one was called:  libgeos_c-1.dll
Why is this ugly creature back?

If it was to congeal the libtool / CMake worlds I guess I can learn to live
with this ugliness.

Thanks,
Regina





More information about the geos-devel mailing list