アプリケーションのレンダリング コードを C++ で記述し、それ以外はすべて Haskell で記述しようとしています。私の C++ コードは、boost ライブラリと Ogre3D ライブラリにリンクしています。
GHC でコンパイル済みの .o ファイルを使用して Haskell プログラムをコンパイル/リンクしようとしていますが、次のようなエラーが発生します。
undefined reference to `Ogre::Vector3::ZERO'
コードをリンクするためにこれまでに思いついたコマンドは次のとおりです。
ghc --make Main.hs obj/Debug/BaseApplication.o obj/Debug/Application.o -lstdc++ -L"C:/Ogre/OgreSDK_MinGW_v1-8-0/bin/Debug" -L"C:/Ogre/OgreSDK_MinGW_v1-8-0/bin/Release" -I"C:/Ogre/OgreSDK_MinGW_v1-8-0/include" -I"C:/Ogre/OgreSDK_MinGW_v1-8-0/include/OGRE" -I"C:/Ogre/OgreSDK_MinGW_v1-8-0/include/OIS" -I"C:/Ogre/OgreSDK_MinGW_v1-8-0/boost" -optl-Wl -optl--enable-runtime-pseudo-reloc -optl--enable-auto-image-base -optl--enable-auto-import -optl--add-stdcall-alias -optl-mthreads
2 つの BaseApplication.o と Application.o、私のファイルの 2 つ、Ogre3D と boost ライブラリもリンクしようとします。また、Code::Blocks からコピーしたリンカー オプションもいくつかあります。
Haskell 用の Ogre3D ( http://hackage.haskell.org/package/hogre )への小さなバインディングがあることは知っていますが、私はライブラリの初心者であり、ライブラリを学習するためのリソースはすべて C++ で書かれています。それをHaskellに翻訳しなければならないという障壁も持ちたくありません。
外部 C++ ライブラリを Haskell コードにリンクするにはどうすればよいですか? 明確にするために、私は C++ ルーチンに C ラッパーを使用して、名前がコンパイラーによって破壊されないようにしています。また、FFI を使用しています。Haskell にディレクトリを提供するために間違ったオプションを使用していますか、それとも何か不足していますか?