在Windows上将c ++ dll与Haskell-Platform链接,输出'undefined reference'

时间:2012-01-23 13:49:18

标签: gcc haskell mingw iconv

我是Haskell的狂热爱好者,并且不得不在Windows上编译我的小Haskell程序。我的程序使用iconv包,后者又使用用c / c ++编写的外部库。为了让事情有效,我有:

  • 运行GNU-Iconv设置并添加其“bin”文件夹,其中 'libiconv-2.dll'和'libiconv2.dll'位于PATH 变量
  • 将'LibIconv开发者文件'提取并复制到'mingw'文件夹中 Haskell平台位置。
  • 然后'cabal install iconv'编译,我有cabal包 安装。

现在,当我尝试在Leksah中构建我的模块时,我收到来自'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

对于'GHCi',我也面临一个问题:

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'

我认为可能的解决方案是将c / c ++头文件正确设置为'mingw'文件夹并将PATH变量设置为'lib'文件,但我对它知之甚少,所以任何帮助都将非常感谢

1 个答案:

答案 0 :(得分:1)

在Windows上安装libiconv有点棘手。

  1. it site here
  2. 下载libiconv 二进制开发人员文件
  3. 通过mingw文件夹解压缩这两个包,该文件夹位于Haskell Platform文件夹中。
  4. 下载Iconv latest version for the moment
  5. 的cabal包
  6. 修改iconv.cabal文件,因此include-dirsextra-lib-dirs的行似乎是

    include-dirs:    cbits, "C:\\HaskellPlatform\\2013.2.0.0\\mingw\\include"
    extra-lib-dirs:  "C:\\HaskellPlatform\\2013.2.0.0\\mingw\\lib"
    
  7. 注意Windows路径中的双破折号,并将其编辑为Haskell平台的路径。

    1. 修改iconv.cabal文件,有if os(darwin) || os(freebsd)行,将其更改为if os(darwin) || os(freebsd) || os(windows)
    2. 多数民众赞成,现在你可以从iconv pachage dir
    3. 运行cabal install命令了