我在使用ghc版本7.0.3.20110330的Ubuntu 11.10上运行nvidia显示驱动程序的"当前版本更新".您可以通过运行来重现:
curl http://ix.io/1t6 > Stroke.hs; ghc --make Stroke.hs; ./Stroke
...
Stroke: user error (unknown GLU entry gluOrtho2D)
Run Code Online (Sandbox Code Playgroud)
但我可以运行opengl,它运行正常.我尝试了glxgears,它运行良好,我运行了一个opengl基准测试,它运行良好.
haskell opengl libs版本的运行结果:
for p in OpenGL OpenGLRaw GLURaw; do ghc-pkg latest $p; done
OpenGL-2.4.0.1
OpenGLRaw-1.1.0.1
GLURaw-1.1.0.0
Run Code Online (Sandbox Code Playgroud)
这绝对是一个错误。链接器有问题(我不确定这是特定于 11.10 还是 GHC 7.0+)。这是向我解释的:链接器本质上决定,由于您没有静态链接到 libglut,因此它只会通过根本不将可执行文件链接到它来进行优化。您可以通过将以下补丁应用于 GLURaw 1.1.0.0 来解决此问题:
diff -ur GLURaw-1.1.0.0.orig/cbits/HsGLURaw.c GLURaw-1.1.0.0/cbits/HsGLURaw.c
--- GLURaw-1.1.0.0.orig/cbits/HsGLURaw.c 2011-05-12 09:02:30.000000000 +1200
+++ GLURaw-1.1.0.0/cbits/HsGLURaw.c 2011-05-11 23:08:10.000000000 +1200
@@ -68,6 +68,9 @@
#include <stdlib.h>
#include <dlfcn.h>
+#include <stdio.h>
+#include <GL/glu.h>
+
void*
hs_GLU_getProcAddress(const char *name)
@@ -80,6 +83,7 @@
/* Get a handle for our executable. */
handle = dlopen(NULL, RTLD_LAZY);
}
+ printf("%p\n", gluBeginCurve);
return handle ? dlsym(handle, name) : NULL;
}
Only in GLURaw-1.1.0.0: dist
Run Code Online (Sandbox Code Playgroud)
应用此补丁后在 GLURaw 上运行cabal install,应该可以解决这个问题。
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |