R Windows and macOS binary packages use static builds only to ensure completeness. With Autotools, this involved some jumping through hoops and local hot patching of --static-clibs and --static-libs adding -lstdc++, but has remained feasible, with incantations like (-fPIC needed downstream to link the package shared object into the R language engine):

mkdir build-static
cd build-static
export CFLAGS=-fPIC
export CXXFLAGS=-fPIC
export CPPFLAGS=-fPIC
../configure --prefix=/home/rsb/static_old --enable-static=yes -disable-shared
make
make install

I have tried to grasp what has gone completely wrong with Cmake. I never succeeded in using Cmake before to create libgeos.a and libgeos_c.a to use in building R packages, but this was not a problem, because Autotools worked.

My current incantation is:

mkdir build-static
cd build-static
export CFLAGS=-fPIC
export CXXFLAGS=-fPIC
export CPPFLAGS=-fPIC
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/home/rsb/static -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ..
cmake --build .
cmake --build . --target install

The simplest test is to try to build static, and to attempt to compile the a test from rgeos/configure.ac:

cat > geos_test.cc << _EOCONF
#include <geos_c.h>
#ifdef __cplusplus
extern "C" {
#endif
static void __errorHandler(const char *fmt, ...) {
    return;
}
static void __warningHandler(const char *fmt, ...) {
    return;
}
int main() {
GEOSContextHandle_t r = initGEOS_r((GEOSMessageHandler) __warningHandler, (GEOSMessageHandler) __errorHandler);
    finishGEOS_r(r);
}
#ifdef __cplusplus
}
#endif
_EOCONF

g++ `<static/bin>geos-config --cflags` -o geos_test geos_test.cc \
`<static/bin>geos-config --static-clibs`

for me giving this failure for Cmake static, but success for Autotools:

/usr/bin/ld: /home/rsb/static/lib64/libgeos.a(WKTWriter.cpp.o): in function `geos::io::WKTWriter::writeNumber[abi:cxx11](double) const': WKTWriter.cpp:(.text+0xe39): undefined reference to `geos_d2sfixed_buffered_n'
collect2: error: ld returned 1 exit status

This on current Fedora 34; when I can work out how to get a viable Cmake workflow, I can try to transfer it to Windows cross-compilation under MXE and native macOS.

Any help very welcome.

Roger

--
Roger Bivand
Emeritus Professor
Department of Economics, Norwegian School of Economics,
Postboks 3490 Ytre Sandviken, 5045 Bergen, Norway.
e-mail: roger.biv...@nhh.no
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
_______________________________________________
geos-devel mailing list
geos-devel@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/geos-devel

Reply via email to