64ビットGHCで32ビットDLLを構築したいと思います。そしてここに最小限の例があります。GHC:64ビットGHCを使用して32ビットDLLを構築する方法は? (関数をC++から呼び出す)
Test.hs
#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;
}
init_exit.cpp
{-# 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!"
そして私は、次のコマンドを使用して、ライブラリーを構築:
GH C -c -O Test.hs
GHC -c init_exit.cpp
GHC -shared -o Test.dllのTest.o init_exit.o
何のフラグ私はGHCに渡す必要がありますかおそらく64ビットの代わりに32ビットのDLLを構築するgccに?あるいは、これを行う別の方法があります。
おそらくこのリンク:https://ghc.haskell.org/trac/ghc/wiki/Building/Compiling32on64が役立ちますか? –
@TomaszLewowski私のせいで、私はこの特定のマシンにWindowsがあることを指定するのを忘れてしまいます。 –