FFI: calling Haskell from C++?

Felix Breuer felix at fbreuer.de
Tue Sep 13 11:20:44 EDT 2005


Hello everyone,

we have tried long and hard to call Haskell functions from C++ using
the FFI mechanism but without success. Our problem is as follows:


We tried the C case first. Taking the example code from Chapter 
8.2 of the GHC User Guide, we created files Foo.hs and main.c
and then did

  $ ghc -fffi -c Foo.hs
  /tmp/ghc28407.hc: In function `__stginit_Foo_':
  /tmp/ghc28407.hc:278: warning: implicit declaration of function `getStablePtr'
  $ ghc -fffi Foo. 
  Foo.hi  Foo.hs  Foo.o   
  $ mv main.cpp main.c   
  $ ghc -fffi Foo.o Foo_stub.o  main.c 
  $ ./a.out 
  2500
  2500
  2500
  2500
  2500

which worked fine.


But when we simply rename main.c  ->  main.cpp, then

  $ ghc -fffi Foo.o Foo_stub.o main.cpp 
  main.o(.text+0x22): In function `main':
  main.cpp: undefined reference to `__stginit_Foo()'
  main.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
  collect2: ld returned 1 exit status


We tried many different options to ghc and also using g++
directly, all to no avail. It would be really great if someone could shed
some light on this. For convenience, we have attached Foo.hs and main.cpp.


Thanks,
Felix
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Foo.hs
Type: application/octet-stream
Size: 158 bytes
Desc: not available
Url : http://www.haskell.org//pipermail/glasgow-haskell-users/attachments/20050913/3169d708/Foo.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: main.cpp
Type: application/octet-stream
Size: 393 bytes
Desc: not available
Url : http://www.haskell.org//pipermail/glasgow-haskell-users/attachments/20050913/3169d708/main.obj


More information about the Glasgow-haskell-users mailing list