Windows 如何让GHCi加载Opengl软件包?
我可以使用GHC成功构建与OpenGL链接的可执行文件,但是我无法将包加载到GHCi中。这对我来说绝对是一个回归,因为它在32位GHC上工作(至少是我升级的版本)。我认为GHC版本并不重要,只是我使用的是64位GHC系统 在维护人员的推荐下,我成功地将正确的64位版本的opengl32显式地引入GHCi。这似乎是一个更高层次的问题 以下是相关的输出。遗憾的是,详细的输出同样具体。函数wglGetProcAddress用于查找opengl api挂钩在dll中的位置Windows 如何让GHCi加载Opengl软件包?,windows,opengl,ghci,Windows,Opengl,Ghci,我可以使用GHC成功构建与OpenGL链接的可执行文件,但是我无法将包加载到GHCi中。这对我来说绝对是一个回归,因为它在32位GHC上工作(至少是我升级的版本)。我认为GHC版本并不重要,只是我使用的是64位GHC系统 在维护人员的推荐下,我成功地将正确的64位版本的opengl32显式地引入GHCi。这似乎是一个更高层次的问题 以下是相关的输出。遗憾的是,详细的输出同样具体。函数wglGetProcAddress用于查找opengl api挂钩在dll中的位置 $ ghcii.sh -pa
$ 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'
我已经有一段时间没有涉足Haskell开发的那个层次了。但它看起来很像一个标准的链接问题 我可以给你一个关于为什么会发生这种情况的答案,但目前我不知道如何解决它,除了解决上游的问题 函数
wglGetProcAddress
位于opengl32.dll
中。因此,您的HSOpenGLRaw
似乎没有正确链接到该符号,因此无法找到该符号
如果这种情况发生在*nix环境中,一个简单的解决方案是LD_PRELOADlibGL.so
。但是,在Windows上,将模块加载到进程中并不会使其符号对进程的其余部分自动可见,因此在那里不起作用
这也解释了为什么它适用于独立二进制文件。这些是在运行时外部链接的。因此,可以将额外的库传递给链接器,链接器将解析缺少的依赖项