如何让GHCi加载Opengl包?

时间:2017-07-08 16:55:31

标签: windows opengl ghci

我可以使用GHC成功构建与OpenGL链接的可执行文件,但是我无法将软件包加载到GHCi中。这绝对是我的回归,因为它适用于32位GHC(至少我升级的版本)。我不认为GHC版本很重要,只是因为我使用的是64位GHC系统。

根据维护者的建议,我明确地将正确的64位版本的opengl32成功引入了GHCi。这似乎是一个更高的问题。

这是相关的输出。不幸的是,详细输出同样具体。函数wglGetProcAddress用于查找opengl api挂钩在dll中的位置。

$ ghcii.sh  -package OpenGL   
GHCi, version 7.6.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package OpenGLRaw-1.2.0.0 ... linking ... ghc.exe: unable to load 
package `OpenGLRaw-1.2.0.0'
ghc.exe: C:\...\cabal\OpenGLRaw-1.2.0.0\ghc-7.6.1\HSOpenGLRaw-1.2.0.0.o: 
unknown symbol `__imp_wglGetProcAddress'

1 个答案:

答案 0 :(得分:1)

自从我涉足Haskell的发展水平以来,已经有一段时间了。但它看起来与标准链接问题相似。

我可以给你一个答案,说明为什么会发生这种情况,但目前我不知道如何解决问题,而不是解决上游问题。

功能wglGetProcAddress位于opengl32.dll。所以你的HSOpenGLRaw似乎与它没有正确的联系,因此无法找到符号。

如果这发生在* nix环境中,那么简单的解决方案就是LD_PRELOAD libGL.so。但是,在Windows上将模块加载到流程中并不会使其符号自动显示给流程的其余部分,因此无法在那里工作。

这也解释了为什么它适用于独立二进制文件。这些是在运行时之外链接的。因此可以将额外的库传递给链接器,这将解决缺少的依赖关系。