Hello Isaac, Friday, April 18, 2008, 7:27:56 PM, you wrote:
absolutely true! it's required if you use new/delete and other things supported by c++ RTS > if you'd normally be linking using g++, you'll need (IIRC) -lstdc++ > added to linking-ghc's command line > Alfonso Acosta wrote: >> Although you could use gcc to link the code I wouldn't recommend it >> (mainly for the problems you are currently having) >> >> SImply call GHC to compile both the C and Haskell code. It will take >> care of finding the headers and supplying the necessary linker >> arguments. >> >> ghc -ffi -c foo.hs myfoo_c.c >> >> BTW, you don't need to compile viaC >> >> 2008/4/17 Miguel Lordelo <[EMAIL PROTECTED]>: >>> Well Isaac...I became now a little bit smarter then yesterday!!! >>> >>> I show you the example that I found and on which I?m working with. >>> >>> File: foo.hs >>> module Foo where >>> >>> foreign export ccall foo :: Int -> IO Int >>> >>> foo :: Int -> IO Int >>> foo n = return (length (f n)) >>> >>> f :: Int -> [Int] >>> f 0 = [] >>> f n = n:(f (n-1)) >>> >>> To get the C wrapper you insert the following command: >>> ghc -ffi -fvia-C -C foo.hs >>> >>> After execution you will have these following additional files: >>> >>> foo.hc >>> foo.hi >>> foo_stub.c >>> foo_stub.h >>> foo_stub.o >>> >>> What I did next was to create a file named: myfoo_c.c, where I will call the >>> foo function (implemented in Haskell). >>> (you can see this example on >>> http://www.haskell.org/ghc/docs/latest/html/users_guide/ffi-ghc.html ) >>> But the problem is to compile with gcc (must I put any flag or whatever set >>> something) >>> >>> The gcc output is: >>> myfoo_c.c:2:19: error: HsFFI.h: No such file or directory >>> >>> I downloaded this header file from: (I know that is not the correct way, but >>> it was the only idea that occurs at the moment) >>> http://www.koders.com/c/fidD0593B84C41CA71319BB079EFD0A2C80211C9337.aspx >>> >>> I compiled again and the following return error appears: >>> myfoo_c.c:(.text+0x1c): undefined reference to `hs_init' >>> myfoo_c.c:(.text+0x31): undefined reference to `foo' >>> myfoo_c.c:(.text+0x50): undefined reference to `hs_exit' >>> collect2: ld returned 1 exit status >>> >>> These functions are necessary to setup GHC runtime (see: >>> http://www.haskell.org/ghc/docs/latest/html/users_guide/ffi-ghc.html ) >>> >>> What I want to know is how to compile myfoo_c.c?! Is it with GCC or GHC?! >>> >>> Chears, >>> Miguel Lordelo. >>> >>> >>> >>> >>> On Wed, Apr 16, 2008 at 9:16 PM, Isaac Dupree <[EMAIL PROTECTED]> >>> wrote: >>> >>>> perhaps >>>> >>>> haskell: >>>> foreign export "foo_func" foo :: Int -> IO Int >>>> -- I forget the rest of the syntax here >>>> >>>> C++: >>>> >>>> extern "C" { >>>> int foo_func(int i); >>>> } >>>> >>>> int some_cplusplus_function() { >>>> int bat = 3; >>>> int blah = foo_func(bat); >>>> return blah; >>>> } >>>> >>>> >>>> Is that all you need to do? >>>> >>>> >>>> Miguel Lordelo wrote: >>>> >>>>> >>>>> >>>>> Hi all, >>>>> >>>>> Well...somehow I'm a beginner in Haskell. But actually my interest in >>>>> Haskell will increase if it is possible to call a haskell function in >>> C++. >>>>> Something like GreenCard ( http://www.haskell.org/greencard/ ) >>> simplifying >>>>> the task of interfacing Haskell programs to external libraries >>> (usually). >>>>> But is there also a task to interface a foreign language with Haskell, >>> but >>>>> calling Haskell functions. Or c2hs which is an interface generator that >>>>> simplifies the development of Haskell bindings to C libraries. >>>>> >>>>> I want to know this, because in my company some guys are doing some >>> testing >>>>> with Frotran and MatLab and I want to show them the power of haskell and >>> the >>>>> software which we are using is implemented in C++ (there is the reason >>> to >>>>> make Haskel -> C++). >>>>> >>>>> I read somewhere that the only way for C++ calling a haskell function is >>> to >>>>> create a binding between Haskell and C and from C to C++, but a easy >>> "Hello >>>>> World" example was not there. >>>>> Unfortunatelly I couldn't found anything usefull, like an complete >>> example, >>>>> or how to compile the code from haskell to C to C++. >>>>> >>>>> Can sombody help me, please :P >>>>> >>>>> Chears, >>>>> Miguel Lordelo. >>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------------ >>>>> >>>>> >>>>> _______________________________________________ >>>>> Haskell-Cafe mailing list >>>>> Haskell-Cafe@haskell.org >>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe >>>>> >>>> >>> >>> _______________________________________________ >>> Haskell-Cafe mailing list >>> Haskell-Cafe@haskell.org >>> http://www.haskell.org/mailman/listinfo/haskell-cafe >>> >>> >> > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe -- Best regards, Bulat mailto:[EMAIL PROTECTED] _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe