creating packages
Simon Marlow
simonmar@microsoft.com
Tue, 29 May 2001 11:17:43 +0100
> Who could, please, consult on the package setting in ghc-5.00.1
> ?
> Let the project foo consist of the files /t/A.hs
> /t/t1/B.hs,
> B import A,
> the user work in /u/ and exploit foo in compiling, linking
> and interpreting.
>=20
> Everything seems to work below, except `ghci -package'=20
> and `ghc -c -package-name foo'
>=20
> (ghc-5.00.1 compiled from source for Linux, i386-unknown).=20
> What I do:
>=20
> -------------------------------------------------
> * apply ghc --make B;
That should be=20
=09
ghc -package-name foo --make B.
because you're building modules for package 'foo'.
> * move all *.o *.hi files to /t/export/ ;
> * command cd /t/export/
> ar -q libHSfoo.a *.o (creating a library)
>=20
> * create a file p.txt containing
>=20
> Package {name =3D "foo",
> import_dirs =3D ["/t/export" ],
> source_dirs =3D [],
> library_dirs =3D ["/t/export" ],
> hs_libraries =3D ["HSfoo"],
> extra_libraries =3D [],
> include_dirs =3D [], c_includes =3D [],
> package_deps =3D [], extra_ghc_opts =3D [],
> extra_cc_opts =3D [], extra_ld_opts =3D []
> }
> and apply ghc-pkg -a < p.txt
> adding a package foo to ghc.
> -------------------------------------------------
>=20
> Then, for the user module /u/Main.hs
> importing B,
> the user commands cd /u; ghc -c -package foo Main.hs
> ghc -o run Main.o -package foo
> - and it works.
> But ghci -package foo
> yields
> Loading package foo ... can't find .o or .so/.DLL for: HSfoo=20
> (libHSfoo.so: cannot open shared object file: No such file=20
> or directory)
GHCi can't load .a files (at the moment). You can build a .o file from
a .a file like so (with GNU ld):
ld --whole-archive libHSfoo.a -o libHSfoo.o
Cheers,
Simon