[GRASS-dev] porting i.spec.sam to grass7

Hi,

porting to grass7 i.spec.sam (grass-addons/grass7/imagery/)

I am getting a set of complaints like this:

OBJ.x86_64-unknown-linux-gnu/spec_angle.o:(.bss+0x158): multiple definition of `Avector’
OBJ.x86_64-unknown-linux-gnu/main.o:/home/yann/dev/grass-addons/grass7/imagery/i.spec.sam/main.c:92: first defined here

while it is actually defined in global.h, and global.h is read in main.c as well as in spectral_angle.c . The line 92 in main.c is the first appearance, without declaring Avector (just using it).

Yann

···

On Mon, Jan 19, 2015 at 11:31 AM, Yann Chemin <ychemin@gmail.com> wrote:

Hi,

porting to grass7 i.spec.sam (grass-addons/grass7/imagery/)

I am getting a set of complaints like this:

OBJ.x86_64-unknown-linux-gnu/spec_angle.o:(.bss+0x158): multiple definition of `Avector’
OBJ.x86_64-unknown-linux-gnu/main.o:/home/yann/dev/grass-addons/grass7/imagery/i.spec.sam/main.c:92: first defined here

while it is actually defined in global.h, and global.h is read in main.c as well as in spectral_angle.c . The line 92 in main.c is the first appearance, without declaring Avector (just using it).>

You just miss an “include guard”:

#ifndef GRANDFATHER_H
#define GRANDFATHER_H

struct foo {
int member;
};

#endif /* GRANDFATHER_H */

(example from http://en.wikipedia.org/wiki/Include_guard)

Compare:

http://trac.osgeo.org/grass/browser/grass-addons/grass6/imagery/i.spec.sam/global.h?rev=50996
http://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.edge/gauss.h?rev=52501

Yann



grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev

On Mon, Jan 19, 2015 at 5:31 PM, Yann Chemin <ychemin@gmail.com> wrote:

Hi,

porting to grass7 i.spec.sam (grass-addons/grass7/imagery/)

I am getting a set of complaints like this:

OBJ.x86_64-unknown-linux-gnu/spec_angle.o:(.bss+0x158): multiple definition
of `Avector'
OBJ.x86_64-unknown-linux-gnu/main.o:/home/yann/dev/grass-addons/grass7/imagery/i.spec.sam/main.c:92:
first defined here

while it is actually defined in global.h, and global.h is read in main.c as
well as in spectral_angle.c . The line 92 in main.c is the first appearance,
without declaring Avector (just using it).

[neteler@pgis_north i.spec.sam]$ grep Avector *.h
global.h:GLOBAL VEC *b, *Avector;

I guess the GLOBAL declarations need to be fixed as time ago in other
GRASS modules using "extern". See for example:

http://trac.osgeo.org/grass/changeset/32675/grass/trunk/raster/r.to.vect

Markus

Seems to be the last hurdle…

ogr_api.h

···

On 19 January 2015 at 22:31, Markus Neteler <neteler@osgeo.org> wrote:

On Mon, Jan 19, 2015 at 5:31 PM, Yann Chemin <ychemin@gmail.com> wrote:

Hi,

porting to grass7 i.spec.sam (grass-addons/grass7/imagery/)

I am getting a set of complaints like this:

OBJ.x86_64-unknown-linux-gnu/spec_angle.o:(.bss+0x158): multiple definition
of `Avector’
OBJ.x86_64-unknown-linux-gnu/main.o:/home/yann/dev/grass-addons/grass7/imagery/i.spec.sam/main.c:92:
first defined here

while it is actually defined in global.h, and global.h is read in main.c as
well as in spectral_angle.c . The line 92 in main.c is the first appearance,
without declaring Avector (just using it).

[neteler@pgis_north i.spec.sam]$ grep Avector *.h
global.h:GLOBAL VEC *b, *Avector;

I guess the GLOBAL declarations need to be fixed as time ago in other
GRASS modules using “extern”. See for example:

http://trac.osgeo.org/grass/changeset/32675/grass/trunk/raster/r.to.vect

Markus


(the mail from my mobile isn't yet here, so I try again)

On Mon, Jan 19, 2015 at 7:13 PM, Yann Chemin <ychemin@gmail.com> wrote:

Seems to be the last hurdle..
ogr_api.h
----------------
In file included from
/home/yann/dev/grass_yann/dist.x86_64-unknown-linux-gnu/include/grass/vect/digit.h:3:0,
                 from
/home/yann/dev/grass_yann/dist.x86_64-unknown-linux-gnu/include/grass/vector.h:4,
                 from main.c:27:
/home/yann/dev/grass_yann/dist.x86_64-unknown-linux-gnu/include/grass/vect/dig_structs.h:27:21:
fatal error: ogr_api.h: No such file or directory
#include <ogr_api.h>
                     ^
compilation terminated.
------------------

You need to add in the Makefile:

EXTRA_INC = $(PROJINC)

Markus

On Jan 19, 2015 7:13 PM, “Yann Chemin” <ychemin@gmail.com> wrote:

Seems to be the last hurdle…
ogr_api.h

In file included from /home/yann/dev/grass_yann/dist.x86_64-unknown-linux-gnu/include/grass/vect/digit.h:3:0,
from /home/yann/dev/grass_yann/dist.x86_64-unknown-linux-gnu/include/grass/vector.h:4,
from main.c:27:
/home/yann/dev/grass_yann/dist.x86_64-unknown-linux-gnu/include/grass/vect/dig_structs.h:27:21: fatal error: ogr_api.h: No such file or directory
#include <ogr_api.h>
^
compilation terminated.

See the last line in this fix

https://trac.osgeo.org/grass/changeset/64242

… one more include you need.

Markus


On 19 January 2015 at 22:31, Markus Neteler <neteler@osgeo.org> wrote:

On Mon, Jan 19, 2015 at 5:31 PM, Yann Chemin <ychemin@gmail.com> wrote:

Hi,

porting to grass7 i.spec.sam (grass-addons/grass7/imagery/)

I am getting a set of complaints like this:

OBJ.x86_64-unknown-linux-gnu/spec_angle.o:(.bss+0x158): multiple definition
of `Avector’
OBJ.x86_64-unknown-linux-gnu/main.o:/home/yann/dev/grass-addons/grass7/imagery/i.spec.sam/main.c:92:
first defined here

while it is actually defined in global.h, and global.h is read in main.c as
well as in spectral_angle.c . The line 92 in main.c is the first appearance,
without declaring Avector (just using it).

[neteler@pgis_north i.spec.sam]$ grep Avector *.h
global.h:GLOBAL VEC *b, *Avector;

I guess the GLOBAL declarations need to be fixed as time ago in other
GRASS modules using “extern”. See for example:

http://trac.osgeo.org/grass/changeset/32675/grass/trunk/raster/r.to.vect

Markus


grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev