
So as everyone probably knows, ghc7 requires -rtsopts to enable +RTS parsing. Apparently this makes it include various header files in rts/ when linking, because after upgrading to ghc7 I suddenly got syntax errors from headers there. Some investigation revealed that the problems were use of 'new' as a variable name in rts/storage/Block.h, and implicit conversion from a bool to an enum rtsBool in rts/ClosureMacros.h. These things are fine in C, but not in C++, and I'm linking with -pgmc g++ -pgml g++ so they were a problem. I was able to fix them by simply renaming 'new' and replacing the implicit conversion with explicit. But it makes me think setting g++ for the "C" compiler was incorrect. I'm linking with c++ code via a wrapper that uses 'extern "C" { ... }' to ensure the haskell FFI knows how to call it, and if I don't set pgmc then the link dies horribly and very verbosely when none of the c++ symbols are visible. So I arrived at that flag by guessing after my program wouldn't link without it, not because I saw documentation saying this is how to do it. Is there a better way to link to c++?

On 05/05/2011 17:24, Evan Laforge wrote:
So as everyone probably knows, ghc7 requires -rtsopts to enable +RTS parsing. Apparently this makes it include various header files in rts/ when linking, because after upgrading to ghc7 I suddenly got syntax errors from headers there. Some investigation revealed that the problems were use of 'new' as a variable name in rts/storage/Block.h, and implicit conversion from a bool to an enum rtsBool in rts/ClosureMacros.h. These things are fine in C, but not in C++, and I'm linking with -pgmc g++ -pgml g++ so they were a problem. I was able to fix them by simply renaming 'new' and replacing the implicit conversion with explicit.
But it makes me think setting g++ for the "C" compiler was incorrect. I'm linking with c++ code via a wrapper that uses 'extern "C" { ... }' to ensure the haskell FFI knows how to call it, and if I don't set pgmc then the link dies horribly and very verbosely when none of the c++ symbols are visible. So I arrived at that flag by guessing after my program wouldn't link without it, not because I saw documentation saying this is how to do it.
Is there a better way to link to c++?
Does it work with just -pgml, or do you need -pgmc too? Cheers, Simon
participants (2)
-
Evan Laforge
-
Simon Marlow