On Fri, Feb 27, 2009 at 11:47 AM, achim <ak7@jupiter.uni-freiburg.de> wrote:
...
qgis: symbol lookup error: /usr/lib64/libqgisgrass.so.1.0: undefined
symbol: G__no_gisinit
Here the full explanations from Glynn to an older mail
with a similar question:
On Thu, Aug 14, 2008 at 5:37 AM, Glynn Clements
<glynn@gclements.plus.com> wrote:
G. Allegri wrote:
Even switching to develbrunch I receive the same error:
usr/local/lib/libgdal.so: undefined reference to `G_no_gisinit'
This indicates that your GDAL library was indeed built --with-grass. I
suggest building it without that option, and using the GDAL-GRASS
plugin instead.
If you build GDAL -with-grass, you will need to re-compile GDAL every
time that GRASS is updated from now on. The problem arises from
r32695, which makes G_gisinit() check that libgis was built with the
same version of gis.h as the caller.
The change adds G_gisinit() and G_no_gisinit() macros:
#define GIS_H_VERSION "$Revision: 32726 $"
#define G_gisinit(pgm) G__gisinit(GIS_H_VERSION, (pgm))
#define G_no_gisinit() G__no_gisinit(GIS_H_VERSION)
The value of GIS_H_VERSION is automatically updated to the SVN
revision whenever gis.h is updated.
The change also renames the functions to G__gisinit() and
G__no_gisinit() (which is why you get the "undefined reference" error
when using an old GDAL with a new libgis), and adds version checks:
int G__gisinit(const char *version, const char *pgm)
{
...
if (strcmp(version, GIS_H_VERSION) != 0)
G_fatal_error(_("Incompatible library version for module"));
Any code which uses G_gisinit() or G_no_gisinit() passes the version
of gis.h with which it was compiled to the library functions, which
check that the same version of gis.h was used to compile the library.
The rationale is to avoid having to track down subtle errors caused by
version incompatibilities between libgis and any code which uses it.
Now, if there is an incompatibility, you get a very unsubtle error
telling you that there's an incompatibility.
--
Glynn Clements <glynn@gclements.plus.com>
Hope this helps,
Markus