+#elif !defined( WIN32 )
+
+void *SGGetGLProcAddress(const char *func) {
+ static void *libHandle = NULL;
+ void *fptr = NULL;
+
+ /*
+ * Clear the error buffer
+ */
+ dlerror();
+
+ /*
+ * Since libGL must be linked to the binary we run on, this is the
+ * right handle. That 'current binary' handle also avoids conflicts which
+ * arise from linking with a different libGL at link time an than later
+ * use the standard libGL at runtime ...
+ */
+ if (libHandle == NULL)
+ libHandle = dlopen(NULL, RTLD_LAZY);
+
+ if (libHandle != NULL) {
+ fptr = dlsym(libHandle, func);
+
+#if defined (__FreeBSD__)
+ const char *error = dlerror();
+#else
+ char *error = dlerror();