I thought so too, but didn't find anything that seemed to work. One thing that perhaps could work would be to set the -l flag from the .ghci file. But when I tried giving -lincrease on the command line, apparently GHC expects to find a file named libincrease.so, which apparently is not the same as the existing increase.o (I tried renaming it :) ).

/ Emil



Corey O'Connor skrev:
I would think there is a command you can embed in the .ghci file that
would automate the loading of the object files. But I didn't see one
on a quick scan of the manual:
http://www.haskell.org/ghc/docs/latest/html/users_guide/ghci-dot-files.html

-Corey O'Connor



On Tue, Oct 21, 2008 at 9:10 AM, Emil Axelsson <[EMAIL PROTECTED]> wrote:
Hi,

I'm making my first attempt at using some C code in my Haskell program. I
need it because I have a large amount of small constant tables, and GHC
takes ages to compile the if I use ordinary lists (and the object file gets
huge). If there's any way of achieving this without going to C, I'd be
interested to know.

My question is about how to compile a library that contains C code. At the
end of this message is a simple example of an 'increase' function. To
compile, I run

 ghc Increase.hs --make -o increase increase.c

and everything works as expected. But then when I want to load the example
in GHCi, I need to give the object file at the command line

 ghci Increase increase.o

or I get "unknown symbol `increase'" when I try to run main. It feels a bit
awkward to have to list the object files every time I want to run GHCi. Is
there any way of avoiding that? There must be, because if I install the
files as a Cabal library, I can fire up GHCi without mentioning any object
files. But I don't want to go through cabal every time I want test some part
of my code.

Thanks for any help,

/ Emil



----------------

increase.h:

 int increase(int x);



increase.c:

 #include "increase.h"

 int increase(int x) {
   return x+1;
 }



Increase.hs:

 {-# INCLUDE "increase.h" #-}
 {-# LANGUAGE ForeignFunctionInterface #-}

 import Foreign.C

 foreign import ccall "increase.h increase" inc :: CInt -> CInt

 main = print (inc 2, inc 20)

----------------


_______________________________________________
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

Reply via email to