[Haskell-cafe] FFI for a beginner
Yves Parès
limestrael at gmail.com
Thu Jul 14 10:18:19 CEST 2011
I think you should definitely use hsc2hs.
It is simple to you use and would allow you to replace things like:
peek ptr = do* a <- peekByteOff ptr 0
b <- peekByteOff ptr 4*
return (MyStructType a b)
By:
#include "MyStruct.h"
-- ^ Needs to be defined in a separate header
peek ptr = do
a <- (#peek MyStruct, foo) ptr
b <- (#peek MyStruct, bar) ptr
return (MyStructType a b)
But I just know hsc2hs. Does c2hs automatically writes the Storable
instances ? (Because it's kind of a daunting task...)
2011/4/12 Andrew Pennebaker <andrew.pennebaker at gmail.com>
> hsc2hs and c2hs are good suggestions, and some of the tutorials I'm
> following use them.
>
> But 1) Many Haskell FFI tutorials don't require them, so they only seem to
> help, or only help in older versions of GHC.
>
> And 2) When I did compile using c2hs, it just produced the same file, but
> with filler comments like {#- LINE 13 #-}. And they still refused to compile
> for the same reason:
>
> ld: duplicate symbol _Charm_getWidth_info in charm.o and charm.o
>
> Cheers,
>
> Andrew Pennebaker
> www.yellosoft.us
>
> On Sat, Apr 9, 2011 at 9:50 PM, Jason Dagit <dagitj at gmail.com> wrote:
>
>> I don't know how to make ghc load them without using either hsc2hs or
>> c2hs. I've had better experiences with hsc, but your mileage may vary.
>>
>> On Apr 8, 2011 3:34 AM, "Andrew Pennebaker" <andrew.pennebaker at gmail.com>
>> wrote:
>>
>> ncurses is proving too difficult to setup, so I'm working on a new library
>> called charm. The C code works by itself, but I can't compile a Haskell
>> wrapper for it. While the tutorials at HaskellWiki<http://www.haskell.org/haskellwiki/FFI_complete_examples>are helpful, they're outdated. Argh! The
>> docs<http://www.haskell.org/ghc/docs/latest/html/users_guide/ffi-ghc.html#glasgow-foreign-headers>say that -#include pragmas no longer work, but fail to explain how to load
>> code without them. Suffice to say I have no recourse but trial and error.
>>
>> GitHub: charm <https://github.com/mcandre/charm> and hscharm<https://github.com/mcandre/hscharm>
>>
>> <https://github.com/mcandre/charm>$ make
>> cp /usr/include/charm.c .
>> ghc --make -fforce-recomp -o hellocharm hellocharm.hs charm.hs charm.c
>> -I/usr/include -dylib-install-name /usr/lib/libcharm.dynlib
>> [1 of 2] Compiling Charm ( charm.hs, charm.o )
>> [2 of 2] Compiling Main ( hellocharm.hs, hellocharm.o )
>> Linking hellocharm ...
>> ld: duplicate symbol _Charm_getWidth_info in charm.o and charm.o
>> collect2: ld returned 1 exit status
>> make: *** [hellocharm] Error 1
>>
>> Cheers,
>>
>> Andrew Pennebaker
>> www.yellosoft.us
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110714/9b2b1123/attachment.htm>
More information about the Haskell-Cafe
mailing list