如何編譯一個(Haskell)程序以便它不需要DLL?如何構建一個程序以便它不需要DLL
我寫了一個使用GLUT的程序,需要glut32.dll。我用ghc --make program.hs
編譯它。現在我想分發我的程序,但我不希望它需要任何DLL(所以我可以給用戶提供.exe)。我嘗試編譯與ghc -static --make program.hs
,但它沒有工作,我仍然得到「用戶錯誤(未知的GLUT條目glutInit)」。
我該怎麼做?
如何編譯一個(Haskell)程序以便它不需要DLL?如何構建一個程序以便它不需要DLL
我寫了一個使用GLUT的程序,需要glut32.dll。我用ghc --make program.hs
編譯它。現在我想分發我的程序,但我不希望它需要任何DLL(所以我可以給用戶提供.exe)。我嘗試編譯與ghc -static --make program.hs
,但它沒有工作,我仍然得到「用戶錯誤(未知的GLUT條目glutInit)」。
我該怎麼做?
這是唯一可能的,如果GLUT提供了庫的靜態版本(這可能被命名爲glut32s.lib
,但沒有要求他們稱之爲特別的東西)。
這種方法的成功與否還取決於GHC是否允許連接外部靜態庫。 ghc
的手冊頁指示-static
僅適用於Haskell庫,而不適用於其他外部庫。
假設你有需要的C庫的靜態版本,您可以創建一個靜態哈斯克爾可執行文件:
ghc -O2 --make -static -optc-static -optl-static A.hs -fvia-C
這種方式確保了Haskell的成分,和C組件將靜態鏈接,通過C工具鏈。
參見http://stackoverflow.com/questions/5953199/create-a-static-haskell-linux-executable – 2011-05-12 03:06:31