[英]GHC: how to build a 32-bit DLL using 64-bit GHC? (To call functions from c++)
我想用64位GHC構建32位DLL。 這是最小的例子。
Test.hs
{-# LANGUAGE ForeignFunctionInterface #-}
module Test where
import Foreign.C.Types
foreign export ccall c_hello :: IO()
foreign export ccall boo :: CInt
c_hello :: IO()
c_hello = do
print "Hello!"
init_exit.cpp
#include "Test_stub.h"
#include <C:\Program Files\Haskell Platform\8.0.1\lib\include\Rts.h>
#define DLLExport extern "C" __declspec(dllexport)
DLLExport void hello()
{
c_hello();
}
DLLExport int HsStart()
{
int argc = 1;
char* argv[] = {"ghcDLL", NULL};
char** args = argv;
hs_init(&argc, &args);
printf("Haskell library has been initialized!\n");
return 0;
}
DLLExport int HsEnd()
{
hs_exit();
printf("Haskell library has been finalized!\n");
return 0;
}
然后我使用以下命令構建庫:
ghc -c -O Test.hs
ghc -c init_exit.cpp
ghc -shared -o Test.dll Test.o init_exit.o
我應該將哪些標志傳遞給ghc或gcc以構建32位DLL而不是64位? 或許還有另一種方法可以做到這一點。
正常的Windows 64位GHC版本(例如可以從GHC網站下載的版本)只能構建64位目標文件。 例如,它不包括GHC附帶的任何庫的32位版本。
您可以選擇構建Windows 64位到Windows 32位交叉編譯器,或者只運行正常的Windows 32位GHC版本(可能更容易)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.