gpt4 book ai didi

haskell - GHC:如何使用 64 位 GHC 构建 32 位 DLL? (从c++调用函数)

转载 作者:行者123 更新时间:2023-12-02 09:59:04 26 4
gpt4 key购买 nike

我想用 64 位 GHC 构建 32 位 DLL。这是最小的例子。

测试.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(可能更容易)。

关于haskell - GHC:如何使用 64 位 GHC 构建 32 位 DLL? (从c++调用函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40017835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com