[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