haskell - Cabal selects wrong linker -
i working on haskell program linked old c++ code. created c interface , got working ghc only. tried convert used makefile cabal project , cabal on last step selects wrong linker.
because of dependencies have use quite old ghc , gcc. doing calling cabal (1.24.0.0.) this:
cabal install --with-ghc=ghc-7.6.3 --with-gcc=/opt/gcc-3.3.6/bin/gcc --with-ld=/opt/gcc-3.3.6/bin/gcc for compile- , intermediate configure linking ok, -v3 following lines:
using gcc version 3.3.6 given user at: /opt/gcc-3.3.6/bin/gcc using ghc version 7.6.3 given user at: /home/oswald/ghcs/bin/ghc-7.6.3 ... using ld given user at: /opt/gcc-3.3.6/bin/gcc all works fine until final linking step:
linking dist/dist-sandbox-c45ed4c7/build/miscconfig/miscconfig ... *** c compiler: '/opt/gcc-3.3.6/bin/gcc' '-c' '/tmp/ghc28340_0/ghc28340_0.c' '-o' ... *** c compiler: '/opt/gcc-3.3.6/bin/gcc' '-c' '/tmp/ghc28340_0/ghc28340_0.s' '-o' ... *** linker: '/usr/bin/gcc' '-fno-stack-protector' '-wl,--hash-size=31' '-w so last line specifies /usr/bin/gcc linker, system 1 , therefore link errors should /opt/gcc-3.3.6/bin/gcc (have use pre-3.4.0 gcc because of link compatibility 1 of used c++ libraries , gcc 3.3.6 latest old abi).
so doing wrong? cabal says selects linker old gcc uses newer 1 system?
when use ghc -pgmc /opt/gcc-3.3.6/bin/gcc switch in makefile works prefer cabal sandbox working...
this apparently had nothing cabal, not instruct ghc use c compiler specified cabal option --with-gcc.
use -pgml select linker documented on ghc man page.
(one point may cause confusion others , worth mentioning. ghc uses c compiler final link step. means -pgml must refer gcc, not ld. consequently flags intended consumed ld such -rpath must prefixed -wl, before being fed -optl.)
Comments
Post a Comment