Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何让GHCi加载Opengl软件包?_Windows_Opengl_Ghci - Fatal编程技术网

Windows 如何让GHCi加载Opengl软件包?

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

我可以使用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'

我已经有一段时间没有涉足Haskell开发的那个层次了。但它看起来很像一个标准的链接问题

我可以给你一个关于为什么会发生这种情况的答案,但目前我不知道如何解决它,除了解决上游的问题

函数
wglGetProcAddress
位于
opengl32.dll
中。因此,您的
HSOpenGLRaw
似乎没有正确链接到该符号,因此无法找到该符号

如果这种情况发生在*nix环境中,一个简单的解决方案是LD_PRELOAD
libGL.so
。但是,在Windows上,将模块加载到进程中并不会使其符号对进程的其余部分自动可见,因此在那里不起作用

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