[GRASS-user] Compiling GRASS 7.9 using zstandard source

Massimiliano Alvioli nocharge at gmail.com
Sun Sep 20 07:55:44 PDT 2020


Hi all,

I have a question about installing 7.9 on a remote machine, in which I
do not have superuser privileges (galileo at CINECA) - thus I can't
install zstd packages. I downloaded zstd v1.45 from github, unpacked
it, and realized this library is not so "standard", meaning that users
are not supposed to compile it and place it in some location (in an
easy way, at least: there is no configure script in there). This means
that configuring GRASS with the following flags:

    --with-zstd \
    --with-zstd-includes=/galileo/home/userexternal/malvioli/local/zstd/lib \
    --with-zstd-libs=/galileo/home/userexternal/malvioli/local/zstd/lib

does not work. Note that I used zstd/lib as "include" folder because
zstd.h happens to be there; there is no include folder in the source
tree whatsoever. By "does not work" I mean that compiling GRASS would
give zillions of:

/galileo/home/userexternal/malvioli/local/grass-7.9.0/dist.x86_64-pc-linux-gnu/lib/libgrass_gis.7.9.so:
undefined reference to `ZSTD_isError'
/galileo/home/userexternal/malvioli/local/grass-7.9.0/dist.x86_64-pc-linux-gnu/lib/libgrass_gis.7.9.so:
undefined reference to `ZSTD_decompress'
/galileo/home/userexternal/malvioli/local/grass-7.9.0/dist.x86_64-pc-linux-gnu/lib/libgrass_gis.7.9.so:
undefined reference to `ZSTD_compress'
/galileo/home/userexternal/malvioli/local/grass-7.9.0/dist.x86_64-pc-linux-gnu/lib/libgrass_gis.7.9.so:
undefined reference to `ZSTD_getErrorName'
/galileo/home/userexternal/malvioli/local/grass-7.9.0/dist.x86_64-pc-linux-gnu/lib/libgrass_gis.7.9.so:
undefined reference to `ZSTD_compressBound'

errors. Instructions on zstandard's github page say:

"Presuming a project needs to integrate libzstd's source code (as
opposed to linking a pre-compiled library), the /lib source directory
can be copy/pasted into target project. Then the local build system
must setup a few include directories. Some setups are automatically
provided in prepared build scripts, such as Makefile, but any other
3rd party build system must do it on its own.
This integration is now simplified, thanks to @felixhandte, by making
all dependencies within /lib relative, meaning it’s only necessary to
setup include directories for the *.h header files that are directly
included into target project (typically zstd.h). Even that task can be
circumvented by copy/pasting the *.h into already established include
directories."

I do not understand anything of that - any help is really appreciated.


M


More information about the grass-user mailing list