trying to debug why i wasn't able to run flightgear on my laptop, i
think i found a problem with SGLookupFunction. the problem is that we
call dlclose() before we return the pointer to the GL function, and,
if i understand things correctly, this invalidates the handle and the
address might not be valid anymore (on my laptop i kept getting core

anyway the fix is very simple: instead of calling dlopen() on libGL
and then passing the libGL handle to dlsym() one can simply invoke
dlsym on RTLD_DEFAULT (which is a special pseudo-handler that will
find the first occurrence of the desired symbol using the default
library search order). now i can run flightgear on both my laptop
(with a radeon mobility card) and on my desktop (nvidia card) and i
think the clouds actually look much better.

this is the patch:

RCS file: /var/cvs/SimGear-0.3/SimGear/simgear/screen/extensions.hxx,v
retrieving revision 1.13
diff -u -r1.13 extensions.hxx
--- simgear/screen/extensions.hxx       21 May 2004 14:50:49 -0000      1.13
+++ simgear/screen/extensions.hxx       23 Jun 2004 01:08:01 -0000
@@ -69,12 +69,7 @@
     // GLX extension is *not* guaranteed to be supported. An alternative
     // dlsym-based approach will be used instead.
-    void *libHandle;
-    void (*fptr)();
-    libHandle = dlopen("", RTLD_LAZY);
-    fptr = (void (*)()) dlsym(libHandle, func);
-    dlclose(libHandle);
-    return fptr;
+    return (void (*)()) dlsym(RTLD_DEFAULT, func);


| I believe the moment is at hand when, by a paranoiac and active |
|  advance of the mind, it will be possible (simultaneously with  |
|  automatism and other passive states) to systematize confusion  |
|  and thus to help to discredit completely the world of reality. |

Flightgear-devel mailing list

Reply via email to