我怎么告诉GHC,当它与FFI一起尝试编译C ++文件时,它应该在特定文件夹中查找一个库?

时间:2013-03-07 18:04:45

标签: haskell ffi

我在目录src / Galakhsy /中有一个Haskell文件,Saturn.hs和一个C ++文件hssaturn.cpp和hssaturn.h。 hssaturn.cpp需要libsaturn.cpp和/或libsaturn.hpp,它们位于lib / saturn / src / lib /中。

我不知道如何正确编译它,任何指针?

1 个答案:

答案 0 :(得分:2)

使用g++ -c filename.cpp将所有C ++文件编译为目标文件。在您的情况下,这会产生hssaturn.o和libsaturn.o。然后用ghc --make -o whatever Saturn.hs hssaturn.o libsaturn.o编译你的Haskell程序。同时使用-lblabla指定C ++内容所需的任何共享库。您可能至少需要C ++标准库,即-lstdc++,使GHC命令类似于

ghc --make -o whatever Saturn.hs hssaturn.o libsaturn.o -lstdc++

(好吧,模两个目标文件的正确路径)。

还记得使用extern "C"来阻止名称修改,因为你从Haskell调用的C ++函数。

附录:libsaturn这个名字让我觉得它可能是一个图书馆。您可能需要考虑将其编译为那样并简单地动态链接(使用-l切换到GHC,如上所述)。