2017-07-08 1 views
0

GHCを使用してOpenGLにリンクする実行ファイルを正常にビルドできますが、GHCiにロードするパッケージを取得できません。 32ビット版のGHC(少なくとも私がアップグレードしたバージョン)で動作するので、これは間違いなく私の退行です。私はGHCのバージョンが重要ではないと思っています。私が64ビットGHCシステムを使用しているという事実だけです。GHCiにOpenGLパッケージをロードさせるにはどうすればよいですか?

メンテナーのお勧めで、私は明らかに正しい64ビットバージョンのopengl32をGHCiに正常に移植しました。それはストリームの上の問題であるようです。

ここに、関連する出力があります。冗長な出力は残念なことに特有のものです。関数wglGetProcAddressは、dgl内のopengl APIフックがどこにあるかを調べるために使用されます。

$ 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

私はハスケル開発のレベルを手伝ってからしばらくしています。しかし、それは標準的なリンク問題に似ています。

私はあなたになぜそれが起こったのかについての答えを与えることができますが、現時点では問題を上流に解決することができません。

wglGetProcAddressは、opengl32.dllにあります。だからあなたのHSOpenGLRawはそれとは正しくリンクされていないらしいので、シンボルを見つけることができません。

これが* nix環境で発生した場合、簡単な解決策はLD_PRELOAD libGL.soです。しかし、Windowsでモジュールをプロセスにロードしても、残りのプロセスでシンボルが自動的に表示されるわけではありません。

これは、スタンドアロンバイナリで動作する理由も説明しています。それらは実行時の外部にリンクされています。したがって、余分なライブラリをリンカに渡すことができます。リンカは欠落している依存関係を解決します。

関連する問題