
Hello, IIRC, strlen doesn't count the terminating '\0', so you'll need to malloc(strlen(*ascii) + 1). Not sure why python works, maybe just different memory layout hides the bug. Thanks, Yuras On Tue, 2013-11-19 at 12:59 -0200, Thiago Padilha wrote:
Hi
I'm trying write a ffi binding to the v8 javascript engine (C++ library). Theres one already at https://github.com/sol/v8 but I want to do it again as an exercise to improve by haskell skills.
I chose this library be because it will force me to deal with impure functions using monads. Since its not a trivial library, it will also improve my knowledge of writing FFI bindings and cabal packages in case I want to wrap more C++ libraries in the future.
My first step is to port the 'hello world' example in v8 embedders guide(https://developers.google.com/v8/get_started) as a haskell binding. So I have downloaded/compiled v8 and created the following directory structure:
src/V8.hs cbits/haskell-v8.cpp # v8 libraries deps/lib/libv8_base.a deps/lib/libv8_snapshot.a # v8 headers deps/include/
Here's the contents of the haskell-v8.cpp file: http://pastebin.com/RfYCCxFQ (basically a copy of the v8 embedders example function, except that it returns a char pointer).
and here's the haskell module: http://pastebin.com/fnXVbEeU
I compiled a shared library exposing the c "hello" function with the following command:
$ g++ \ -shared -o libhaskellv8.so \ -I./deps/include \ -L./deps/lib \ ./cbits/haskell-v8.cpp \ -lv8_base \ -lv8_snapshot \ -lpthread \ -lrt
And loaded into ghci with the following:
$ ghci -L. -lhaskellv8 src/V8.hs
The problem is that I get a segmentation fault when I call the 'hello' function from ghci. To ensure the library was compiled correctly, I successfully called it from python:
$ python -c \ 'from ctypes import CDLL, c_char_p; lv8=CDLL("libhaskellv8.so"); lv8.hello.restype = c_char_p; print lv8.hello()' Hello, World!
I have selectively uncommented lines from the c++ file, and the segmentation faults starts happening when I uncomment line 14 (HandleScope handle_scope(isolate)).
What am I missing here? _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe