我在 src/Galakhsy/ 目录中有一个 Haskell 文件 Saturn.hs,以及一个 C++ 文件 hssaturn.cpp 和 hssaturn.h。hssaturn.cpp 需要 libsaturn.cpp 和/或 libsaturn.hpp,它们位于 lib/saturn/src/lib/ 中。
我不知道如何正确编译它,任何指针?
使用 . 将所有 C++ 文件编译为目标文件g++ -c filename.cpp
。在您的情况下,这会产生 hssaturn.o 和 libsaturn.o。然后用 . 编译你的 Haskell 程序ghc --make -o whatever Saturn.hs hssaturn.o libsaturn.o
。还要指定 C++ 所需的任何共享库-lblabla
。您可能至少需要 C++ 标准库,即使-lstdc++
GHC 命令类似于
ghc --make -o whatever Saturn.hs hssaturn.o libsaturn.o -lstdc++
(嗯,以两个目标文件的正确路径为模)。
还要记住通过使用extern "C"
从 Haskell 调用的 C++ 函数来防止名称混淆。
附录: libsaturn 这个名字让我觉得它可能是一个图书馆。您可能需要考虑按原样编译它并简单地动态链接(-l
如上所述切换到 GHC)。