I am a Haskell enthusiast and have got stuck upon compiling my little Haskell program on Windows. My program uses the iconv package, which in turn uses the foreign library written in c/c++. To make things work I have :
- Run GNU-Iconv setup and added its 'bin' folder, where
'libiconv-2.dll' and 'libiconv2.dll' are located, to the
PATH
variable. - Extracted and copied 'LibIconv developer files' to the 'mingw' folder of Haskell Platform location.
- Then 'cabal install iconv' compiles and I have the cabal package installed.
Now, when I try to build my module in Leksah, I get the following message from 'GHC':
Building norms-parser-0.0.1...
Linking dist\build\norms-parser\norms-parser.exe ...
C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc-7.0.4/libHSiconv-0.4.1.0.a(hsiconv.o):hsiconv.c:(.text+0x7): undefined reference to `_imp__libiconv_open'
C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc-7.0.4/libHSiconv-0.4.1.0.a(hsiconv.o):hsiconv.c:(.text+0x17): undefined reference to `_imp__libiconv'
C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc-7.0.4/libHSiconv-0.4.1.0.a(hsiconv.o):hsiconv.c:(.text+0x27): undefined reference to `_imp__libiconv_close'
collect2: ld returned 1 exit status
With 'GHCi',I face an issue too:
ghc.exe: unable to load package `iconv-0.4.1.0'
ghc.exe: C:\Documents and Settings\kdv\Application Data\cabal\iconv-0.4.1.0\ghc- 7.0.4\HSiconv-0.4.1.0.o: unknown symbol `__imp__libiconv_open'
I think the probable solution is in having the right setup of c/c++ header files to 'mingw' folder and setting PATH variables to 'lib' files, but I have little knowledge about it, so any help will be much appreciated.
Installing libiconv is a little tricky on Windows.
- Download libiconv binary and developer files from it site here
- Unzip both packages over mingw folder, which is inside your Haskell Platform folder.
- Download cabal package for Iconv latest version for the moment
Edit iconv.cabal file, so lines with
include-dirs
andextra-lib-dirs
will looks likeinclude-dirs: cbits, "C:\\HaskellPlatform\\2013.2.0.0\\mingw\\include" extra-lib-dirs: "C:\\HaskellPlatform\\2013.2.0.0\\mingw\\lib"
notice the double dashes in windows path, and edit it to your path of Haskell Platform.
- Edit iconv.cabal file, there is a line with
if os(darwin) || os(freebsd)
, change it toif os(darwin) || os(freebsd) || os(windows)
- Thats it, now you can run
cabal install
command from iconv pachage dir
来源:https://stackoverflow.com/questions/8972662/linking-c-dll-with-haskell-platform-on-windows-outputs-undefined-reference