[GRASS-dev] problem with r.mapcalc in GRASS 7
William Kyngesburye
woklist at kyngchaos.com
Sat Jun 26 01:07:46 EDT 2010
On Jun 25, 2010, at 8:34 PM, Glynn Clements wrote:
>
> Barton Michael wrote:
>
>> I'm not sure if this is a general issues or something specific to my OS X 10.6.4 build.
>>
>> I just updated and compiled trunk.
>>
>> When I try to use r.mapcalc, I get the following error: ERROR: Unable to load GDAL library
>
> This is related to the r.external support. GDAL should only be loaded
> on demand, i.e. if you try to open or create a "linked" map.
>
> You can eliminate the problem by unsetting GDAL_DYNAMIC, e.g.
>
> make GDAL_DYNAMIC= ...
>
> This causes libraster to be linked against GDAL directly, rather than
> loading it dynamically with dlopen(). However, this might cause other
> problems. GDAL is written in C++, which means that simply loading it
> will cause constructors to be executed.
>
> FWIW, the list of candidate filenames is:
>
> libgdal.1.1.so
> gdal.1.0.so
> gdal.so.1.0
> libgdal.so.1
> libgdal.so
>
These won't work on OS X for either a Unix build of GDAL, where all libraries are named *[.x].dylib, or a framework build, where it would be GDAL.framework/Versions/x.y/GDAL (x.y major.minor version, ie currently 1.7).
Also, the above (probably) won't be tried anyways - __unix__ is not a standard GCC define on OSX (I thought it was, but couldn't find any reference to it). __APPLE__ is the one to use for an OSX test.
> If GDAL is called something else, or isn't found by the loader (for
> whatever reason), you'll get the error you describe. On Linux, the
> library needs to either be in $LD_LIBRARY_PATH, or in the cache
> created by ldconfig. I'm not familiar with the mechanisms used on OSX.
>
OS X uses DYLD_LIBRARY_PATH, otherwise it works the same, for unix-style libraries.
There is also a DYLD_FRAMEWORK_PATH that works similarly for frameworks.
But, according to the dlopen manpage, DYLD_FRAMEWORK_PATH doesn't work for dlopen()'d frameworks, only DYLD_LIBRARY_PATH works for dlopen()'d unix-style libraries (it only explicitly mentions DYLD_LIBRARY_PATH), assuming OSX style library names are used.
So, compiling with GDAL_DYNAMIC unset is really the only option. Unless some messy framework search logic is added to the dynamic loading.
On Jun 25, 2010, at 10:59 PM, Barton Michael wrote:
> I tried this and got the same error.
make clean first?
-----
William Kyngesburye <kyngchaos*at*kyngchaos*dot*com>
http://www.kyngchaos.com/
Earth: "Mostly harmless"
- revised entry in the HitchHiker's Guide to the Galaxy
More information about the grass-dev
mailing list