I'm currently trying to find out why a few GLUT examples work when they are
compiled by GHC, but not when they are run within GHCi (this happens e.g.
with GLUT/examples/Misc/ARBOcclude.hs). The main difference is that in the
former case libHSGLUT-XY.a is linked into the executable, and in the latter
case HSGLUT-XY.o is loaded/linked by GHCi when "main" is evaluated. Boiling
down the problem to plain C leads to:
------------ strange.c --------------------------
#include <dlfcn.h>
#include <GL/glut.h>
#include <stdio.h>
int main(void) {
void *handle = dlopen("libglut.so", RTLD_NOW | RTLD_GLOBAL);
printf("%p %p\n", dlsym(handle, "glutInit"), glutInit);
return dlclose(handle);
}
---------------------------------------------------
Compiling and running this on my x86_64 openSuSE 10.2 box yields:
---------------------------------------------------
[EMAIL PROTECTED]:~> gcc strange.c -ldl -lglut && ./a.out
0x2b0c26dd8740 0x400658
---------------------------------------------------
Huh??? Using -fpic seems to cure things:
---------------------------------------------------
[EMAIL PROTECTED]:~> gcc strange.c -ldl -lglut -fpic && ./a.out
0x2b58895d7740 0x2b58895d7740
---------------------------------------------------
I don't have a clue what is going on here, and this phenomenon is not
GLUT-related at all, one could use e.g. "cos" from "libm.so", resulting in
basically the same strange behaviour. Are there any dynamic linking
grandmasters on this list who can enlighten me?
Confused,
S.
_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc