GHCi and C++.
Wolfgang Thaller
wolfgang.thaller at gmx.net
Fri Feb 25 13:58:52 EST 2005
> During my ongoing research on "doing whatever I feel like", I
> discovered that using C++ libaries in GHCi (no problems with GHC)
> wasn't as pleasant as I had hoped.
> Apparently C++ sources requires to be linked with crtbegin.o and
> crtend.o (and others?) and I was wondering how to solve this nicely.
> Any hints or pointers would be greatly appreciated.
I think the files crtbegin.o and crtend.o are Linux-specific or maybe
GNU-binutils-specific. Different platforms tend to have different
strange requirements for C++ code.
Loading shared libraries that happen to be written in C++ into GHCi
shouldn't be a problem (or is it? definitely works on Mac OS X).
Loading C++ .o files is a different story.
Generally speaking, there are at least two things that set C++ .o files
apart from "normal" C .o files:
*) static constructors/destructors
Sometimes there are pieces of code that expect to be called before
main() or at program termination. The GHCi Linker doesn't support this,
so some code may crash because things haven't been initialised
properly.
*) multiple definitions
There is often some code in C++ header files (e.g. templates, inline
functions, class members declared in the class declaration). These
pieces of code are sometimes inlined, but sometimes they are not; in
that case, gcc generates code for them in every .o file that uses them
and counts on the linker to just include one version in the final
executable. The GHCi linker will probably just abort and complain about
multiply-defined symbols.
The above is just theory, there might be even more problems in practice
:-( .
Cheers,
Wolfgang
More information about the Glasgow-haskell-users
mailing list