[Haskell-cafe] Re: Problems with Haskell Platform
Pete Chown
1 at 234.cx
Thu Jun 3 06:07:22 EDT 2010
Ivan Lazar Miljenovic wrote:
> Pete Chown <1 at 234.cx> writes:
>> Is there a way of making Cabal install dependencies using the system
>> package manager, then?
> If you mean cabal-install, then no, there's no integration on either
> side.
That's what I thought. As a result of this, you may find that you end
up creating private builds of packages which are shipped by your
distribution. You ask Cabal to install a package, which is not shipped
by your distribution. Cabal will then build that package's
dependencies, *even if* those dependencies should really be installed
using your distribution's package manager.
> This is exactly the same with C programs.
Yes and no. If I download the source of a C library and build my own
shared libraries, my programs might not work on machines where the
distribution's version of that library is in use. The particular
problem in the Haskell world, though, is that Cabal will create this
situation by default.
>> (I believe current versions of ghc insist on linking entirely
>> dynamically or entirely statically. This makes the situation worse,
>> because the lack of a shared library for X prevents the use of shared
>> libraries for anything else.)
> No, 6.12 defaults to statically but allows dynamic linking as well.
That's not what I meant. What I meant is that you can't link against
some Haskell libraries statically, and some dynamically. When linking C
this isn't a problem. If you don't have a shared version of a
particular library, gcc will pick the static version instead. You can
even choose static or dynamic for each individual library:
$ gcc foo.c -o foo -lz
$ ldd foo
linux-gate.so.1 => (0x00d0b000)
libz.so.1 => /lib/libz.so.1 (0x00dd5000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00152000)
/lib/ld-linux.so.2 (0x00a69000)
$ gcc foo.c -o foo -Wl,-Bstatic -lz -Wl,-Bdynamic
$ ldd foo
linux-gate.so.1 => (0x00918000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00db0000)
/lib/ld-linux.so.2 (0x002e5000)
> Really? For C, Gentoo ships very few which either default or have the
> option of static libraries, and I assume the same is true for binary
> distributions.
Sorry I misunderstood what you were saying; you're right. I'm not
familiar with Gentoo, but on Ubuntu virtually everything defaults to
shared libraries. You can choose static if you really want it, though,
as in the example above.
Pete
More information about the Haskell-Cafe
mailing list