[GRASSLIST:2290] example plot_raster_map aus progmangrass (p.264)

Hi there,

I tried to implement the example plot_raster_map aus progmangrass (p.264) to get used to the C-programming in GRASS.
I use a source code installation of grass 5.0.3 on a linux Suse 8.2

After several iteration of the Gmakefile and the plot_raster_map I allways get a hell of an error stack which starts with:

  ./bin/gmake5
   SRC = /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src
   CMD = /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/CMD
   UNUSED = /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/unused
   HEADER = head.i686-pc-linux-gnu
   ARCH = i686-pc-linux-gnu
   GISBASE = /home/gis/disen/links/ipodlas0.1/grass/grass5sources/grass-5.0.3/dist.i686-pc-linux-gnu
   VERSION = 5.0.3 October 2003
#################################################################
/data/gis/nfp48/nfp48/ipodlas0.1/grass
   make -f OBJ.i686-pc-linux-gnu/make.rules

gcc -I/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/include -g -O2 -I /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/include -c plotRasterMap.c -o OBJ.i686-pc-linux-gnu/plotRasterMap.o
gcc -L/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu -o ctest OBJ.i686-pc-linux-gnu/ctest.o OBJ.i686-pc-linux-gnu/plotRasterMap.o -lgis -lraster -ldisplay -lI -lvask -lz
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libgis.a(color_range.o)(.text+0xc2): In function `G_get_color_range':
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/gis/color_range.c:46: undefined reference to `floor'/

the test code looks like this:
/* Versuch: rastermap von Grass aus zu zeichnen */

#include "gis.h" // Grass-lib einbinden
plot_raster_map(char *name,char *mapset,int overlay) {

        struct Colors colors;
        CELL *raster;
        int row, fd, top, bottom, left, right;
        /* perform plotting setup */
        D_setup(!overlay);
        D_get_screen_window(&top, &bottom, &left, &right);
        if (D_cell_draw_setup(&top, &bottom, &left, &right)) //ERROR
        raster = G_allocate_cell_buf( );
        /* open raster map, read and set the colors */

        // neu eingefuegt
        int init = G_init_colors(&colors);
        int color_table = G_read_colors(name, mapset,&colors);

        if((fd = G_open_cell_old (name, mapset)) < 0) // ERROR
      if(G_read_colors (name, mapset, &colors) < 0) //ERROR
        D_set_colors(&colors);
        /* plot */
        D_set_overlay_mode(overlay);
        for(row=0; row >= 0; ) {
      if (G_get_map_row(fd, raster, row) < 0) //ERROR
      row = D_draw_cell(row, raster, &colors);
        }
        G_close_cell(fd);
        G_free_colors(&colors);
        G_free(raster);
      }

the Gmakefile like this:
HOME=$(BIN_CMD)

# include der dirs, zb hier ist gis.h
EXTRA_CFLAGS= -I /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/include

# einbinden der libs: e.g. D_ are in DISPLAYLIB
LIBES= $(GISLIB) $(RASTERLIB) $(DISPLAYLIB) $(IMAGERYLIB) $(VASKLIB) $(VASK)
DEPLIBES= $(DEPIMAGERYLIB) $(DEPGISLIB) $(DEPVASKLIB) $(DEPVASK)

OBJ = ctest.o plotRasterMap.o
ctest: $(OBJ) $(LIBES) $(DEPLIBS)
     $(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBES) $(XDRLIB)

$(LIST): global.h

$(GISLIB): #in case of library changes
$(RASTERLIB):
$(DISPLAYLIB): #muss auch hier aufgefuehrt sein, wenn unter LIBES aufgefuehrt
$(LIBES):
$(DEPLIBS):

did forget to include a module?
can anybody tell me how to go on?

Thanxs for any advice Dani isenegger

ps the status after the installation was;

GRASS is now configured for i686-pc-linux-gnu

   Source directory: /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3
   Build directory: /home/gis/disen/links/ipodlas0.1/grass/grass5sources/grass-5.0.3
   Installation directory: /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5
   C compiler: gcc -g -O2
   FORTRAN compiler: g77

   NVIZ: yes

   X11 support: yes
   DBM support: no
   JPEG support: yes
   TIFF support: yes
   PNG support: yes
   GD support: no
   Tcl/Tk support: yes
   PostgreSQL support: yes
   OpenGL(R) support: yes
   ODBC support: yes
   FFTW support: no
   BLAS support: no
   LAPACK support: no
   Motif support: no
   FreeType support: no
   GLw support: no
   NLS support: no
   Readline support: no

Daniel Isenegger wrote:

I tried to implement the example plot_raster_map aus progmangrass
(p.264) to get used to the C-programming in GRASS.
I use a source code installation of grass 5.0.3 on a linux Suse 8.2

After several iteration of the Gmakefile and the plot_raster_map I
allways get a hell of an error stack which starts with:

/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libgis.a(color_range.o)(.text+0xc2):
In function `G_get_color_range':
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/gis/color_range.c:46:
undefined reference to `floor'/

# einbinden der libs: e.g. D_ are in DISPLAYLIB
LIBES= $(GISLIB) $(RASTERLIB) $(DISPLAYLIB) $(IMAGERYLIB) $(VASKLIB) $(VASK)

You need to add $(MATHLIB) to this line.

To be on the safe side, use of $(GISLIB) should always be followed by:

  $(DATETIMELIB) $(XDRLIB) $(MATHLIB)

as various parts of it may depend upon one or more of those libraries.

--
Glynn Clements <glynn.clements@virgin.net>

Just for info:

this thing was just an ordering problem:
LIBES= $(DISPLAYLIB) $(RASTERLIB) $(GISLIB): works

instead of
LIBES= $(GISLIB) $(DISPLAYLIB) $(RASTERLIB): does not work

why this is so important, I don't know yet ....

cheers

Hi Glynn,
thanks for you advice. I included it in the Gmakefile:

HOME=$(BIN_CMD)
# include of dirs, e.g.gis.h is in ...
EXTRA_CFLAGS= -I /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/include
# including of libs: e.g. D_ are in DISPLAYLIB
LIBES= $(GISLIB) $(DATETIMELIB) $(XDRLIB) $(MATHLIB) $(RASTERLIB) $(DISPLAYLIB) $(IMAGERYLIB) $(VASKLIB) $(VASK)
DEPLIBES= $(DEPIMAGERYLIB) $(DEPGISLIB) $(DEPVASKLIB) $(DEPVASK)

OBJ = ctest.o plotRasterMap.o
ctest: $(OBJ) $(LIBES) $(DEPLIBS)
    $(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBES) $(DEPLIBES)

$(LIST): global.h
$(LIBES): #in case of library change;i.e.they must be here, if in rules
$(DEPLIBS):

and actually a different error:
/data/gis/nfp48/nfp48/ipodlas0.1/grass
  make -f OBJ.i686-pc-linux-gnu/make.rules

gcc -L/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu -o ctest OBJ.i686-pc-linux-gnu/ctest.o OBJ.i686-pc-linux-gnu/plotRasterMap.o -lgis -ldatetime -lz -lm -lraster -ldisplay -lI -lvask /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libI.a /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libgis.a /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libvask.a
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libdisplay.a(raster.o)(.text+0x1a9): In function `draw_cell':
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/display/raster.c:171: undefined reference to `R_move_abs'/

i have to check that: if I get any further from here

thanks dani

Daniel Isenegger wrote:

I tried to implement the example plot_raster_map aus progmangrass (p.264) to get used to the C-programming in GRASS.
I use a source code installation of grass 5.0.3 on a linux Suse 8.2

After several iteration of the Gmakefile and the plot_raster_map I allways get a hell of an error stack which starts with:

/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libgis.a(color_range.o)(.text+0xc2): In function `G_get_color_range':
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/gis/color_range.c:46: undefined reference to `floor'/

# einbinden der libs: e.g. D_ are in DISPLAYLIB
LIBES= $(GISLIB) $(RASTERLIB) $(DISPLAYLIB) $(IMAGERYLIB) $(VASKLIB) $(VASK)

You need to add $(MATHLIB) to this line.

To be on the safe side, use of $(GISLIB) should always be followed by:

  $(DATETIMELIB) $(XDRLIB) $(MATHLIB)

as various parts of it may depend upon one or more of those libraries.

-- Glynn Clements <glynn.clements@virgin.net>

Daniel Isenegger schrieb:

Hi there,

I tried to implement the example plot_raster_map aus progmangrass (p.264) to get used to the C-programming in GRASS.
I use a source code installation of grass 5.0.3 on a linux Suse 8.2

After several iteration of the Gmakefile and the plot_raster_map I allways get a hell of an error stack which starts with:

./bin/gmake5
  SRC = /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src
  CMD = /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/CMD
  UNUSED = /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/unused
  HEADER = head.i686-pc-linux-gnu
  ARCH = i686-pc-linux-gnu
  GISBASE = /home/gis/disen/links/ipodlas0.1/grass/grass5sources/grass-5.0.3/dist.i686-pc-linux-gnu

  VERSION = 5.0.3 October 2003
#################################################################
/data/gis/nfp48/nfp48/ipodlas0.1/grass
  make -f OBJ.i686-pc-linux-gnu/make.rules

gcc -I/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/include -g -O2 -I /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/include -c plotRasterMap.c -o OBJ.i686-pc-linux-gnu/plotRasterMap.o
gcc -L/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu -o ctest OBJ.i686-pc-linux-gnu/ctest.o OBJ.i686-pc-linux-gnu/plotRasterMap.o -lgis -lraster -ldisplay -lI -lvask -lz
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/LIB.i686-pc-linux-gnu/libgis.a(color_range.o)(.text+0xc2): In function `G_get_color_range':
/data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/libes/gis/color_range.c:46: undefined reference to `floor'/

the test code looks like this:
/* Versuch: rastermap von Grass aus zu zeichnen */

#include "gis.h" // Grass-lib einbinden
plot_raster_map(char *name,char *mapset,int overlay) {

       struct Colors colors;
       CELL *raster;
       int row, fd, top, bottom, left, right;
       /* perform plotting setup */
       D_setup(!overlay);
       D_get_screen_window(&top, &bottom, &left, &right);
       if (D_cell_draw_setup(&top, &bottom, &left, &right)) //ERROR
       raster = G_allocate_cell_buf( );
       /* open raster map, read and set the colors */

       // neu eingefuegt
       int init = G_init_colors(&colors);
       int color_table = G_read_colors(name, mapset,&colors);

       if((fd = G_open_cell_old (name, mapset)) < 0) // ERROR
     if(G_read_colors (name, mapset, &colors) < 0) //ERROR
       D_set_colors(&colors);
       /* plot */
       D_set_overlay_mode(overlay);
       for(row=0; row >= 0; ) {
     if (G_get_map_row(fd, raster, row) < 0) //ERROR
     row = D_draw_cell(row, raster, &colors);
       }
       G_close_cell(fd);
       G_free_colors(&colors);
       G_free(raster);
     }

the Gmakefile like this:
HOME=$(BIN_CMD)

# include der dirs, zb hier ist gis.h
EXTRA_CFLAGS= -I /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3/src/include

# einbinden der libs: e.g. D_ are in DISPLAYLIB
LIBES= $(GISLIB) $(RASTERLIB) $(DISPLAYLIB) $(IMAGERYLIB) $(VASKLIB) $(VASK)
DEPLIBES= $(DEPIMAGERYLIB) $(DEPGISLIB) $(DEPVASKLIB) $(DEPVASK)

OBJ = ctest.o plotRasterMap.o
ctest: $(OBJ) $(LIBES) $(DEPLIBS)
    $(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBES) $(XDRLIB)

$(LIST): global.h

$(GISLIB): #in case of library changes
$(RASTERLIB):
$(DISPLAYLIB): #muss auch hier aufgefuehrt sein, wenn unter LIBES aufgefuehrt
$(LIBES):
$(DEPLIBS):

did forget to include a module?
can anybody tell me how to go on?

Thanxs for any advice Dani isenegger

ps the status after the installation was;

GRASS is now configured for i686-pc-linux-gnu

  Source directory: /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5sources/grass-5.0.3
  Build directory: /home/gis/disen/links/ipodlas0.1/grass/grass5sources/grass-5.0.3
  Installation directory: /data/gis/nfp48/nfp48/ipodlas0.1/grass/grass5
  C compiler: gcc -g -O2
  FORTRAN compiler: g77

  NVIZ: yes

  X11 support: yes
  DBM support: no
  JPEG support: yes
  TIFF support: yes
  PNG support: yes
  GD support: no
  Tcl/Tk support: yes
  PostgreSQL support: yes
  OpenGL(R) support: yes
  ODBC support: yes
  FFTW support: no
  BLAS support: no
  LAPACK support: no
  Motif support: no
  FreeType support: no
  GLw support: no
  NLS support: no
  Readline support: no