Thanks, I found on one site how to compile after creating the stub files with GHC:
First step: *ghc -c -ffi haskell_file.hs* Second step - here it is important to know and write where are the ghc libraries: *gcc -I /usr/local/lib/ghc-5.04.3/include -c C_file.c * After that it is important to link my creted C_file with the stub file and compile it: *ghc -no-hs-main -o C_file C_file.o haskell_file.o haskell_file_stub.o* The final result is C_file execution file...just enter C_file and the program is running correctly. This information: how to compile and to link C with Haskell and to call a Haskell funtion from C was quite difficult. But here is my result of googling throw the internet and to find something usefull. Next challange: link C++ with C and creating a usefull documentation and put it online! Ciao, Miguel Lordelo. On Fri, Apr 18, 2008 at 3:33 PM, Alfonso Acosta <[EMAIL PROTECTED]> 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