[GRASS-dev] build system: module overlinking?

Dear Devs:

$ ldd r.surf.area

.. produces the list of linked libraries below.
AFAICT, this includes GDAL/OGR and all of their dependencies.

Should it not be enough for "r.surf.area" [insert any other
r.*/v.* module here] to link against the GRASS libs (plus
a handful of essential system runtime libs)?

Best,

Ben

---

linux-vdso.so.1
libgrass_raster.7.8.so => /opt/grass/lib/libgrass_raster.7.8.so
libgrass_gis.7.8.so => /opt/grass/lib/libgrass_gis.7.8.so
libm.so.6 => /usr/lib/libm.so.6
libc.so.6 => /usr/lib/libc.so.6
libgrass_gproj.7.8.so => /opt/grass/lib/libgrass_gproj.7.8.so
libdl.so.2 => /usr/lib/libdl.so.2
libgrass_datetime.7.8.so => /opt/grass/lib/libgrass_datetime.7.8.so
libz.so.1 => /usr/lib/libz.so.1
libbz2.so.1.0 => /usr/lib/libbz2.so.1.0
libzstd.so.1 => /usr/lib/libzstd.so.1
libpthread.so.0 => /usr/lib/libpthread.so.0
libgdal.so.26 => /usr/lib/libgdal.so.26
libproj.so.15 => /usr/lib/libproj.so.15
libcrypto.so.1.1 => /usr/lib/libcrypto.so.1.1
libpoppler.so.107 => /usr/lib/libpoppler.so.107
libjson-c.so.5 => /usr/lib/libjson-c.so.5
libfreexl.so.1 => /usr/lib/libfreexl.so.1
libgeos_c.so.1 => /usr/lib/libgeos_c.so.1
libexpat.so.1 => /usr/lib/libexpat.so.1
libxerces-c-3.2.so => /usr/lib/libxerces-c-3.2.so
libopenjp2.so.7 => /usr/lib/libopenjp2.so.7
libnetcdf.so.18 => /usr/lib/libnetcdf.so.18
libhdf5.so.200 => /usr/lib/libhdf5.so.200
libgif.so.7 => /usr/lib/libgif.so.7
libjpeg.so.8 => /usr/lib/libjpeg.so.8
libgeotiff.so.5 => /usr/lib/libgeotiff.so.5
libtiff.so.5 => /usr/lib/libtiff.so.5
libpng16.so.16 => /usr/lib/libpng16.so.16
libcfitsio.so.9 => /usr/lib/libcfitsio.so.9
libpq.so.5 => /usr/lib/libpq.so.5
librt.so.1 => /usr/lib/librt.so.1
libspatialite.so.7 => /usr/lib/libspatialite.so.7
libsqlite3.so.0 => /usr/lib/libsqlite3.so.0
libpcre.so.1 => /usr/lib/libpcre.so.1
libcurl.so.4 => /usr/lib/libcurl.so.4
libxml2.so.2 => /usr/lib/libxml2.so.2
liblzma.so.5 => /usr/lib/liblzma.so.5
libicui18n.so.68 => /usr/lib/libicui18n.so.68
libicuuc.so.68 => /usr/lib/libicuuc.so.68
libicudata.so.68 => /usr/lib/libicudata.so.68
libmariadb.so.3 => /usr/lib/libmariadb.so.3
libstdc++.so.6 => /usr/lib/libstdc++.so.6
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1
libfreetype.so.6 => /usr/lib/libfreetype.so.6
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1
liblcms2.so.2 => /usr/lib/liblcms2.so.2
libsmime3.so => /usr/lib/libsmime3.so
libnss3.so => /usr/lib/libnss3.so
libplc4.so => /usr/lib/libplc4.so
libnspr4.so => /usr/lib/libnspr4.so
libgeos-3.8.1.so => /usr/lib/libgeos-3.8.1.so
libnsl.so.2 => /usr/lib/libnsl.so.2
libhdf5_hl.so.200 => /usr/lib/libhdf5_hl.so.200
libsz.so.2 => /usr/lib/libsz.so.2
libmpi.so.40 => /usr/lib/openmpi/libmpi.so.40
libssl.so.1.1 => /usr/lib/libssl.so.1.1
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2
libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2
libnghttp2.so.14 => /usr/lib/libnghttp2.so.14
libidn2.so.0 => /usr/lib/libidn2.so.0
libssh2.so.1 => /usr/lib/libssh2.so.1
libpsl.so.5 => /usr/lib/libpsl.so.5
libkrb5.so.3 => /usr/lib/libkrb5.so.3
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3
libcom_err.so.2 => /usr/lib/libcom_err.so.2
libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0
libnssutil3.so => /usr/lib/libnssutil3.so
libplds4.so => /usr/lib/libplds4.so
libtirpc.so.3 => /usr/lib/libtirpc.so.3
libaec.so.0 => /usr/lib/libaec.so.0
libopen-rte.so.40 => /usr/lib/openmpi/libopen-rte.so.40
libopen-pal.so.40 => /usr/lib/openmpi/libopen-pal.so.40
libutil.so.1 => /usr/lib/libutil.so.1
libhwloc.so.15 => /usr/lib/libhwloc.so.15
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0
libkeyutils.so.1 => /usr/lib/libkeyutils.so.1
libresolv.so.2 => /usr/lib/libresolv.so.2
liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2
libsasl2.so.3 => /usr/lib/libsasl2.so.3
libunistring.so.2 => /usr/lib/libunistring.so.2
libgraphite2.so.3 => /usr/lib/libgraphite2.so.3
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0
libudev.so.1 => /usr/lib/libudev.so.1

Hi Ben,

according to manual “ldd prints the shared objects (shared libraries) required by each program or shared object specified on the command line.” In my reading not only directly linked objects, but cascading dependencies, are listed too.

On mac I can do:
otool -L bin/r.surf.area
bin/r.surf.area:
@rpath/libgrass_raster.7.9.dylib (compatibility version 7.9.0, current version 7.9.0)
@rpath/libgrass_gis.7.9.dylib (compatibility version 7.9.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)

which shows only two grass libs linked.

You may also try:
objdump -p bin/r.surf.area
which perhaps give a different result.

Nicklas

On Monday, 1 March 2021, 14:46:05 CET, Benjamin Ducke benducke@fastmail.fm wrote:

Dear Devs:

$ ldd r.surf.area

… produces the list of linked libraries below.

AFAICT, this includes GDAL/OGR and all of their dependencies.

Should it not be enough for “r.surf.area” [insert any other

r./v. module here] to link against the GRASS libs (plus

a handful of essential system runtime libs)?

Best,

Ben


linux-vdso.so.1

libgrass_raster.7.8.so => /opt/grass/lib/libgrass_raster.7.8.so

libgrass_gis.7.8.so => /opt/grass/lib/libgrass_gis.7.8.so

libm.so.6 => /usr/lib/libm.so.6

libc.so.6 => /usr/lib/libc.so.6

libgrass_gproj.7.8.so => /opt/grass/lib/libgrass_gproj.7.8.so

libdl.so.2 => /usr/lib/libdl.so.2

libgrass_datetime.7.8.so => /opt/grass/lib/libgrass_datetime.7.8.so

libz.so.1 => /usr/lib/libz.so.1

libbz2.so.1.0 => /usr/lib/libbz2.so.1.0

libzstd.so.1 => /usr/lib/libzstd.so.1

libpthread.so.0 => /usr/lib/libpthread.so.0

libgdal.so.26 => /usr/lib/libgdal.so.26

libproj.so.15 => /usr/lib/libproj.so.15

libcrypto.so.1.1 => /usr/lib/libcrypto.so.1.1

libpoppler.so.107 => /usr/lib/libpoppler.so.107

libjson-c.so.5 => /usr/lib/libjson-c.so.5

libfreexl.so.1 => /usr/lib/libfreexl.so.1

libgeos_c.so.1 => /usr/lib/libgeos_c.so.1

libexpat.so.1 => /usr/lib/libexpat.so.1

libxerces-c-3.2.so => /usr/lib/libxerces-c-3.2.so

libopenjp2.so.7 => /usr/lib/libopenjp2.so.7

libnetcdf.so.18 => /usr/lib/libnetcdf.so.18

libhdf5.so.200 => /usr/lib/libhdf5.so.200

libgif.so.7 => /usr/lib/libgif.so.7

libjpeg.so.8 => /usr/lib/libjpeg.so.8

libgeotiff.so.5 => /usr/lib/libgeotiff.so.5

libtiff.so.5 => /usr/lib/libtiff.so.5

libpng16.so.16 => /usr/lib/libpng16.so.16

libcfitsio.so.9 => /usr/lib/libcfitsio.so.9

libpq.so.5 => /usr/lib/libpq.so.5

librt.so.1 => /usr/lib/librt.so.1

libspatialite.so.7 => /usr/lib/libspatialite.so.7

libsqlite3.so.0 => /usr/lib/libsqlite3.so.0

libpcre.so.1 => /usr/lib/libpcre.so.1

libcurl.so.4 => /usr/lib/libcurl.so.4

libxml2.so.2 => /usr/lib/libxml2.so.2

liblzma.so.5 => /usr/lib/liblzma.so.5

libicui18n.so.68 => /usr/lib/libicui18n.so.68

libicuuc.so.68 => /usr/lib/libicuuc.so.68

libicudata.so.68 => /usr/lib/libicudata.so.68

libmariadb.so.3 => /usr/lib/libmariadb.so.3

libstdc++.so.6 => /usr/lib/libstdc++.so.6

libgcc_s.so.1 => /usr/lib/libgcc_s.so.1

libfreetype.so.6 => /usr/lib/libfreetype.so.6

libfontconfig.so.1 => /usr/lib/libfontconfig.so.1

liblcms2.so.2 => /usr/lib/liblcms2.so.2

libsmime3.so => /usr/lib/libsmime3.so

libnss3.so => /usr/lib/libnss3.so

libplc4.so => /usr/lib/libplc4.so

libnspr4.so => /usr/lib/libnspr4.so

libgeos-3.8.1.so => /usr/lib/libgeos-3.8.1.so

libnsl.so.2 => /usr/lib/libnsl.so.2

libhdf5_hl.so.200 => /usr/lib/libhdf5_hl.so.200

libsz.so.2 => /usr/lib/libsz.so.2

libmpi.so.40 => /usr/lib/openmpi/libmpi.so.40

libssl.so.1.1 => /usr/lib/libssl.so.1.1

libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2

libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2

libnghttp2.so.14 => /usr/lib/libnghttp2.so.14

libidn2.so.0 => /usr/lib/libidn2.so.0

libssh2.so.1 => /usr/lib/libssh2.so.1

libpsl.so.5 => /usr/lib/libpsl.so.5

libkrb5.so.3 => /usr/lib/libkrb5.so.3

libk5crypto.so.3 => /usr/lib/libk5crypto.so.3

libcom_err.so.2 => /usr/lib/libcom_err.so.2

libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0

libnssutil3.so => /usr/lib/libnssutil3.so

libplds4.so => /usr/lib/libplds4.so

libtirpc.so.3 => /usr/lib/libtirpc.so.3

libaec.so.0 => /usr/lib/libaec.so.0

libopen-rte.so.40 => /usr/lib/openmpi/libopen-rte.so.40

libopen-pal.so.40 => /usr/lib/openmpi/libopen-pal.so.40

libutil.so.1 => /usr/lib/libutil.so.1

libhwloc.so.15 => /usr/lib/libhwloc.so.15

libkrb5support.so.0 => /usr/lib/libkrb5support.so.0

libkeyutils.so.1 => /usr/lib/libkeyutils.so.1

libresolv.so.2 => /usr/lib/libresolv.so.2

liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2

libsasl2.so.3 => /usr/lib/libsasl2.so.3

libunistring.so.2 => /usr/lib/libunistring.so.2

libgraphite2.so.3 => /usr/lib/libgraphite2.so.3

libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0

libudev.so.1 => /usr/lib/libudev.so.1


grass-dev mailing list

grass-dev@lists.osgeo.org

https://lists.osgeo.org/mailman/listinfo/grass-dev