您的问题似乎是 libstdc++ 没有被初始化。我不完全确定为什么——-lstdc++
在我的系统上就足够了——但看看它是否可以反过来工作。
Main.hs
:
{-# LANGUAGE ForeignFunctionInterface #-}
module Main where
foreign export ccall "Main_main" main :: IO ()
foreign import ccall driver_callback :: IO ()
main = putStrLn "Now in Haskell" >> driver_callback
driver.cc
:
#include <iostream>
extern "C" {
# include "HsFFI.h"
# ifdef __GLASGOW_HASKELL__
# include "Main_stub.h"
extern void __stginit_Main(void);
# endif
void driver_callback(void) {
std::cout << "Back in C++" << std::endl;
}
}
int main(int argc, char **argv) {
hs_init(&argc, &argv);
# ifdef __GLASGOW_HASKELL__
hs_add_root(__stginit_Main);
# endif
std::cout << "Starting in C++" << std::endl;
Main_main();
hs_exit();
return 0;
}
编译:
$ ghc -c --make 主要
[1 of 1] 编译 Main ( Main.hs, Main.o )
$ ghc --make -no-hs-main -lstdc++ 主驱动程序.cc
连接主...
$ ./主要
从 C++ 开始
现在在哈斯克尔
回到 C++