Reh*_*que 5 c++ io haskell ffi ghc
我正在开发一个小的haskell程序,它使用我用C++开发的外部静态库.它通过ghc的FFI(外部函数接口)访问lib.在这个库里面我想对控制台做一些输出.但是,它看起来像c ++方面的东西没有正确的stdout句柄,因为输出没有出现在控制台上.那么,我的问题是:
附加说明:我将libstdc ++直接链接到可执行文件(即ghc -lstdc ++ ...),我天真地认为这是正确的方法.似乎运作良好
免责声明:对于Haskell来说还是一个新手,所以宝贝现在迈出了步伐; P
您的问题似乎是 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
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
编译:
$ ghc -c --make 主要 [1 of 1] 编译 Main(Main.hs、Main.o) $ ghc --make -no-hs-main -lstdc++ 主 driver.cc 链接主... $ ./主要 从 C++ 开始 现在在哈斯克尔 回到C++
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |