我正在尝试用 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
它试图链接两个 BaseApplication.o 和 Application.o,我的两个文件,以及 Ogre3D 和 boost 库。它还有一些我从 Code::Blocks 复制的链接器选项。
我知道 Haskell ( http://hackage.haskell.org/package/hogre ) 与 Ogre3D 有一个小的绑定,但我是该库的初学者,学习该库的所有资源都是用 C++ 编写的;我不想有将它翻译成 Haskell 的障碍。
如何将外部 C++ 库链接到我的 Haskell 代码?需要明确的是,我在 C++ 例程上使用了 C 包装器,以确保名称不会被编译器破坏,并且我使用的是 FFI。我是否使用了错误的选项来为 Haskell 提供目录,或者我缺少什么?