[Haskell-cafe] Re: Haskeline, pcre-light, iconv and Cabal on OSX

Antoine Latter aslatter at gmail.com
Sun Feb 1 14:53:23 EST 2009


On Sun, Feb 1, 2009 at 11:57 AM, Antoine Latter <aslatter at gmail.com> wrote:
> Funny story,
>
> If I do the following three things, I get errors on my Intel Mac OS 10.5:
>
>  * Build an executable with Cabal
>  * Have the executable have a build-dep of pcre-light in the .cabal
>  * use haskeline in the executable itself
>
> I get crazy linker errors relating to haskeline and libiconv:
>
> Shell output:
>>>>>>
> $ cabal clean && cabal configure && cabal build
> cleaning...
> Configuring test-0.0.0...
> Preprocessing executables for test-0.0.0...
> Building test-0.0.0...
> [1 of 1] Compiling Main             ( test.hs, dist/build/test/test-tmp/Main.o )
> Linking dist/build/test/test ...
> Undefined symbols:
>  "_iconv_open", referenced from:
>      _s9Qa_info in libHShaskeline-0.6.0.1.a(IConv.o)
>  "_iconv_close", referenced from:
>      _iconv_close$non_lazy_ptr in libHShaskeline-0.6.0.1.a(IConv.o)
>  "_iconv", referenced from:
>      _sa0K_info in libHShaskeline-0.6.0.1.a(IConv.o)
> ld: symbol(s) not found
> collect2: ld returned 1 exit status
> <<<<<
>
> But all three above conditions need to be true - if I build using 'ghc
> --make' everything works great, even if the executable imports
> pcre-light and haskeline.  If I have build-deps on haskeline and
> pcre-light, but don't actually import haskeline, everything also works
> great.
>
> Here are the files I've used:
>
> test.hs:
>>>>>>
> import System.Console.Haskeline
>
> main :: IO ()
> main = print "Hello!"
> <<<<<
>
> test.cabal
>>>>>>
> Name:                test
> version:             0.0.0
> cabal-version:       >= 1.2
> build-type:          Simple
>
> Executable test
>    main-is:             test.hs
>    build-depends:       base, haskeline, pcre-light>=0.3
> <<<<<
>
> Is there some way I need to be building haskeline on OS X to make this work?
>
> Thanks,
> Antoine
>
> more details:
>
>>>>>>
> $ cabal --version
> cabal-install version 0.6.0
> using version 1.6.0.1 of the Cabal library
> <<<<<
>
>>>>>>
> $ ghc --version
> The Glorious Glasgow Haskell Compilation System, version 6.10.0.20081007
> <<<<<
>
> links:
> pcre-light: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/pcre-light
> haskeline: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/haskeline
>

For folks following along at home, the above example starts working
again if I hard-code some LD flags into my example .cabal file:

>>>>>
Name:                test
version:             0.0.0
cabal-version:       >= 1.2
build-type:          Simple

Executable test
    main-is:             test.hs
    build-depends:       base, iconv, pcre-light>=0.3
    ld-options:          -L/usr/lib -L/opt/local/lib
<<<<<

This way I make sure that I'm linking against the "good" version of
iconv instead of the Mac Ports version.

I'm not sure what a general solution is.

-Antoine


More information about the Haskell-Cafe mailing list