我在 Ubuntu 11.10 上使用 ghc 版本 7.0.3.20110330,运行 nvidia 显示驱动程序的“当前版本更新”。您可以通过运行重现:
curl http://ix.io/1t6 > Stroke.hs; ghc --make Stroke.hs; ./Stroke
...
Stroke: user error (unknown GLU entry gluOrtho2D)
但我可以运行 opengl 并且工作正常。我尝试了 glxgears,它运行良好,我运行了一个 opengl 基准测试,它也运行良好。
haskell opengl 库的版本
运行结果:
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
最佳答案
这是一个明确的错误。链接器有问题(我不确定这是特定于 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
运行
cabal install
应用此补丁后在 GLURaw 上,它应该可以摆脱这个问题。
关于opengl - "unknown GLU entry gluOrtho2D"在 Haskell 中使用 opengl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7805534/