简体   繁体   中英

How do I tell GHC that when it, with the FFI, tries to compile a C++ file, it should look for a library in a particular folder?

I've got a Haskell file, Saturn.hs, and a C++ file hssaturn.cpp and hssaturn.h, in the directory src/Galakhsy/. hssaturn.cpp needs libsaturn.cpp and/or libsaturn.hpp, which are in lib/saturn/src/lib/.

I have no idea how to compile it properly, any pointers?

Compile all the C++ files to object files using g++ -c filename.cpp . This produces, in your case, hssaturn.o and libsaturn.o. Then compile your Haskell program with ghc --make -o whatever Saturn.hs hssaturn.o libsaturn.o . Also specify any shared libraries needed by the C++ stuff with -lblabla . You probably at least need the C++ standard library, ie -lstdc++ , making the GHC command something like

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

(well, modulo the correct paths for the two object files).

Also remember to prevent name mangling by using extern "C" for the C++ functions you call from Haskell.

Addendum: The name libsaturn makes me think it is perhaps a library. You might want to consider compiling it as that and simply linking dynamically (with the -l switch to GHC as above).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM