[Haskell-cafe] FFI: newbie linking problem

Olivier Boudry olivier.boudry at gmail.com
Wed May 14 17:26:28 EDT 2008

Hi all,

I'm trying to call the following C function.

    RFC_RC _stdcall RfcUTF8ToSAPUC(const RFC_BYTE *utf8, unsigned
utf8Length,  SAP_UC *sapuc,
      unsigned *sapucSize, unsigned *resultLength, RFC_ERROR_INFO *info)

I wrote a foreign import for this function:

    foreign import ccall unsafe "sapnwrfc.h RfcUTF8ToSAPUC"
      f_RfcUTF8ToSAPUC :: RfcBytePtr -> CUInt -> SapUCPtr -> Ptr CUInt ->
Ptr CUInt -> RfcErrorInfoPtr -> IO RfcRetCodeType

But when compiling I keep getting this error:

C:\Temp\Haskell\HSAP>ghc --make -LC:/Temp/nwrfcsdk/lib -lsapnwrfc
SAP/Types.hs Test.hs
[1 of 2] Compiling SAP.Types        ( SAP/Types.hs, SAP/Types.o )
Linking Test.exe ...
SAP/Types.o(.text+0x91c):fake: undefined reference to `RfcUTF8ToSAPUC at 24'
collect2: ld returned 1 exit status

I ran nm.exe on the sapnwrfc.lib to see the exports and got this list:

00000000 I .idata$4
00000000 I .idata$5
00000000 I .idata$6
00000000 T .text
00000000 T _RfcUTF8ToSAPUC at 24
00000000 I __imp__RfcUTF8ToSAPUC at 24

It looks like RfcUTF8ToSAPUC at 24 exists. I tried prepending a _ but it
doesn't change anything.

GHC tries to link directly to the .dll file and not to the .lib file. Is
this a problem? Should I convert the .lib to a .a and link the .a?

Is there a way to list the exports directly from the dll file?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080514/3e134f47/attachment.htm

More information about the Haskell-Cafe mailing list