opengl - "unknown GLU entry gluOrtho2D"在 Haskell 中使用 opengl

标签 opengl haskell

我在 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/

相关文章:

c++ - 处理 8 位位图中 alpha channel 的好方法? - OpenGL - C++

list - 如何从haskell中的元组列表中获取特定值?

haskell - 如何保持 Haskell 的强类型输入灵活?

Haskell 从字符串或文本创建 UUID

postgresql - GHCJS 是否可以重用 Template Haskell 生成的代码

opengl - 3D 光线拾取在鼠标未锁定时使用鼠标坐标

c++ - 如何管理代码只显示一次动画?

opengl - OpenGL中的顶点限制

java - 两侧都可见 OpenGL Quad?

haskell - Xmonad: float 窗口时,移动或调整其大小