#5250: SEGFAULT in FFI to C++ library
---------------------------------+------------------------------------------
Reporter: acowley | Owner:
Type: bug | Status: new
Priority: normal | Component: Compiler (FFI)
Version: 7.0.3 | Keywords:
Testcase: | Blockedby:
Os: Unknown/Multiple | Blocking:
Architecture: x86 | Failure: Runtime crash
---------------------------------+------------------------------------------
A binding to [http://opencv.willowgarage.com/wiki/ OpenCV] 2.2 I've been
developing works fine on Mac OS X 10.5 and 10.6, but segfaults in Ubuntu
11.04 (32-bit) and Windows 7. On both Ubuntu and Windows, building a Debug
or RelWithDebInfo build of OpenCV 2.2 seems to fix the problem. On Ubuntu,
OpenCV 2.1 does not have this issue; I have not tried 2.1 on Windows.
To separate the bindings as a source of trouble, I boiled a test case down
to a C function {{{void myDilate(void)}}} that allocates two images which
are then passed to an OpenCV image processing routine, {{{cvDilate}}}. The
{{{myDilate}}} function is defined in {{{MyWrap.c}}}. A shell C program,
{{{CTest2.c}}}, defines a main function that calls this function. Building
that program with,
{{{gcc MyWrap.c CTest2.c -lopencv_core -lopencv_imgproc -o a.out}}}
or
{{{ghc -no-hs-main MyWrap.c CTest2.c -lopencv_core -lopencv_imgproc -o
a.out}}}
produces an executable that runs to completion.
Replacing the C main function with a Haskell main, {{{Test2.hs}}}, that
calls the same function imported via the FFI results in an executable that
segfaults. GDB + heavy printf'ing lead to a first crash within OpenCV at
an assignment to a local that invokes a copy constructor. Changing this
line to some other kind of initialization moves the segfault to another
seemingly innocuous location within OpenCV. On the Windows 7 test machine,
the segfault occurs in a different place, but also in OpenCV.
I have tested this with GHC 7.0.3 and 7.0.3.20110531. The version of gcc
on the linux machine is 4.5.2.
The OpenCV libraries are .dylib on Mac, .so on Linux, and .dll on Windows.
Of note is that OpenCV underwent a fairly large reorganization between 2.1
and 2.2, and is ever more heavily based around templatized C++.
I realize that OpenCV is a large dependency for a ticket, so I am willing
to run any suggested tests.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5250>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs