3
我需要为这个模块哈斯克尔编译DLL
module MarketNews where
import Foreign
import Foreign.C.Types
import Foreign.C.String
import HighAPI(getNextNewsInfo)
getNextNewsInfoM :: IO CString
getNextNewsInfoM = getNextNewsInfo >>= \x -> newCString x
foreign export stdcall getNextNewsInfoM :: IO CString
我编译创建DLL:
C:\Users\test_8\Documents\Project\MarketNews\src>ghc --make MarketNews.hs -fglasgow
-exts
我也有dllMain.o这就像http://haskell.org/ghc/docs/6.12.1/html/users_guide/win32-dlls.html和MyDef.def创建。从那以后,我下一步:
C:\Users\test_8\Documents\Project\MarketNews\src>ghc -shared -o MarketNews.dll M
arketNews.o MarketNews_stub.o dllMain.o MyDef.def
Creating library file: MarketNews.dll.a
Warning: resolving _getNextNewsInfoM by linking to [email protected]
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
MarketNews.o:fake:(.text+0x6b): undefined reference to `HighAPI_getNextNewsInfo_
closure'
MarketNews.o:fake:(.text+0x12d): undefined reference to `__stginit_HighAPI_'
MarketNews.o:fake:(.data+0x10): undefined reference to `HighAPI_getNextNewsInfo_
closure'
collect2: ld returned 1 exit status
据我了解zhcon失败,因为必须有一个根模块。但为什么我可以使用Foreign。*?为什么我不能使用HighAPI模块?我应该把整个程序写在一个文件中吗? 谢谢。
谢谢。我读过这个博客。 我没有看到那里的例子如何创建链接到其他模块的DLL。 – Anton 2010-07-15 05:52:09
Anton:您需要将库中的所有模块链接在一起。例如'ghc -shared -o MarketNews.dll HighAPI.o MarketNews.o MarketNews_stub.o dllMain.o MyDef.def'。 – 2010-07-15 11:27:48
它不起作用,我试了一次又一次。我得到这样的错误: HighAPI.o:假:(文字+ 0x14f):未定义的引用'__stginit_datetimezm0zi2_D ataziDateTime_” collect2:LD返回1退出状态 – Anton 2010-07-15 16:20:15