gpt4 book ai didi

c++ - 从 C++ 调用 Haskell

转载 作者:可可西里 更新时间:2023-11-01 17:58:15 25 4
gpt4 key购买 nike

我正在尝试从 C++ 调用 Haskell。

我尝试使用 this解释;并且已经在 SO 上问了一个问题.

但是,我没有得到任何答案,所以我想重新制定一个最小的、完整的和可验证的示例。

我正在使用 Debian,这是我拥有的(在同一文件夹中):

C++:

// main.cpp
#include <iostream>
#include "Hello_stub.h"

int main(int argc, char** argv) {
hs_init(&argc, &argv);
std::cout << "Hello from C++\n";
helloFromHaskell();
hs_exit();
return 0;
}

haskell :

// hello.hs
module Hello where

foreign export ccall helloFromHaskell :: IO ()

helloFromHaskell :: IO ()
helloFromHaskell = putStrLn "Hello from Haskell"

生成文件:

CPP_SOURCES = main.cpp
HASKELL_SOURCES = Hello.hs
CFLAGS = -Wall -g -fno-stack-protector
HFLAGS = -fforce-recomp

all: main; ./main

main: $(CPP_SOURCES) HaskellPart; g++ \
$(CFLAGS) -o main $(CPP_SOURCES) Hello.o \
-I/usr/lib/ghc/include \
-liconv \
-I/usr/lib/ghc/ghc-8.0.1/include \
-L/usr/lib/ghc/ghc-8.0.1 \
-L/usr/lib/ghc/base-4.9.0.0 \
-lHSbase-4.9.0.0 \
-L/usr/lib/ghc/ghc-prim-0.5.0.0 \
-lHSghc-prim-0.5.0.0 \
-L/usr/lib/ghc/integer-gmp-1.0.0.1 \
-lHSinteger-gmp-1.0.0.1 \
-lHSghc-prim-0.5.0.0 \
-L/usr/lib/ghc/rts \
-lHSrts \

HaskellPart: $(HASKELL_SOURCES); ghc $(HFLAGS) $(HASKELL_SOURCES)

clean: ; rm -rf main && rm -rf *.o && rm -rf *.hi && rm -rf *_stub.h

这是 output .好像是一堆形式的错误

/usr/bin/ld: Hello.o: relocation R_X86_64_32S against symbol `stg_bh_upd_frame_info' can not be used when making a shared object; recompile with -fPIC

怎么了?感谢您的帮助!

最佳答案

不确定它是否真的在你的文件中,或者它是否只是在你提出问题的版本中,但“//hello.hs”不会编译。注释是 -- 在 Haskell 中不是//.

无论如何,有趣的部分......

首先,您需要将 HsFFI.h 头文件导入到您的 C++ 代码中。

#include <iostream>
#include "Hello_stub.h"
#include <HsFFI.h>

然后编译后用ghc链接文件。打开命令提示符/终端并浏览包含 C++ 和 Haskell 文件的目录。然后运行以下命令:

ghc -c -XForeignFunctionInterface -O hello.hs
g++ -c -O main.cpp -I "C:\Program Files\Haskell Platform\7.10.3\lib\include"
ghc -no-hs-main hello.o main.o -lstdc++

第二个命令中的文件路径是包含 HsFFI.h 文件的目录。

运行 main 然后输出:

Hello from C++
Hello from Haskell

关于c++ - 从 C++ 调用 Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43100934/

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