我在目录src / Galakhsy /中有一个Haskell文件,Saturn.hs和一个C ++文件hssaturn.cpp和hssaturn.h。 hssaturn.cpp需要libsaturn.cpp和/或libsaturn.hpp,它们位于lib / saturn / src / lib /中。
我不知道如何正确编译它,任何指针?
答案 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,如上所述)。