Libtool and Support for Shared Libraries (2)
Greg Banks
gnb at fastmail.fm
Thu May 24 23:17:05 EDT 2012
On Tue, May 22, 2012, at 01:47 PM, Дилян Палаузов wrote:
> Hello,
>
> > commit "Makefile.am: move the defintion of COM_ERR_LIB here"
> >
> > I don't think there's any point having COM_ERR_LIB and COM_ERR_LIBS,
> > just one should do, but we can tweak that later.
>
> libimap and libsieve have to depend on libcom_err.a whenever the bundled
> libcom_err.a is used, so that the bundled libcom_err.a is build before
> libimap and libsieve are linked.
Sure, I see why you did it.
> Any ideas how to achieve this, that
> are different from what I did?
Use a single variable, which is set by in the configure script and
appended to in one branch of the conditional (the other branch being
empty).
> > commit "convert lib/libcyrus_min.a to libtool archive"
> > commit "convert lib/libcyrus.a to libtool archive"
> >
> > Looks good, except that the Perl build is broken. I get this:
> >
> > make[2]: Entering directory `/home/gnb/software/cyrus/imapd/perl/imap'
> > make[2]: *** No rule to make target `-lcyrus', needed by `subdirs'.
> > Stop.
> > make[2]: *** Waiting for unfinished jobs....info
> >
> > I've been wrestling with this most of the day but libtool + MakeMaker =
> > one enormous headache :(
>
> I moved "-lcyrus -lcyrus_min" in Makefile.PL.in from MYEXTLIB to
> OTHERLDFLAGS, so that the target subdirs does not depend anymore on
> "-lcyrus -lcyrus_min". Please try with the uploaded fix. (I can
> understand why you got this error, but I do not get it.)
Ok, that builds and installs now :) One more problem: the installed
IMAP.so and managesieve.so depend on the Cyrus libraries but do not have
a runtime library path which will find them in the case where --prefix
!= /usr. The libtool-linked executables installed into bindir do have
that.
gnb at gnb-desktop 2010 readelf -d ../inst/usr/cyrus/bin/imapd
Dynamic section at offset 0x36be0 contains 35 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library:
[libcyrus_imap.so.0] <---
0x0000000000000001 (NEEDED) Shared library: [libcyrus.so.0]
0x0000000000000001 (NEEDED) Shared library:
[libcyrus_min.so.0]
0x0000000000000001 (NEEDED) Shared library: [libwrap.so.0]
0x0000000000000001 (NEEDED) Shared library: [libnsl.so.1]
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libdb-4.8.so]
0x0000000000000001 (NEEDED) Shared library: [libpcre.so.3]
0x0000000000000001 (NEEDED) Shared library:
[libpcreposix.so.3]
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x0000000000000001 (NEEDED) Shared library:
[libcom_err.so.2]
0x0000000000000001 (NEEDED) Shared library: [libsasl2.so.2]
0x0000000000000001 (NEEDED) Shared library:
[libssl.so.0.9.8]
0x0000000000000001 (NEEDED) Shared library:
[libcrypto.so.0.9.8]
0x000000000000000f (RPATH) Library rpath: [/usr/cyrus/lib]
<----
0x000000000000000c (INIT) 0x406d30
0x000000000000000d (FINI) 0x42fc68
but not
gnb at gnb-desktop 2009 readelf -d
../inst/./usr/cyrus/lib/perl/5.10.1/auto/Cyrus/IMAP/IMAP.so
Dynamic section at offset 0x8da0 contains 28 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libcyrus.so.0]
0x0000000000000001 (NEEDED) Shared library:
[libcyrus_min.so.0]
0x0000000000000001 (NEEDED) Shared library: [libdb-4.8.so]
0x0000000000000001 (NEEDED) Shared library: [libsasl2.so.2]
0x0000000000000001 (NEEDED) Shared library:
[libssl.so.0.9.8]
0x0000000000000001 (NEEDED) Shared library:
[libcrypto.so.0.9.8]
0x0000000000000001 (NEEDED) Shared library: [libuuid.so.1]
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x1b88
0x000000000000000d (FINI) 0x8098
> > Also, is there a way of getting rid of these warnings:
> >
> > /bin/bash ./libtool --mode=install /usr/bin/install -c imtest/imtest
> > '/home/gnb/software/cyrus/inst/usr/cyrus/bin'
> > libtool: install: warning: `lib/libcyrus.la' has not been installed in
> > `/usr/cyrus/lib'
> > libtool: install: warning: `lib/libcyrus_min.la' has not been installed
> > in `/usr/cyrus/lib'
> >
> > because there's quite a lot of them and they're confusing the script I
> > use to find compile time warnings.
>
> Pass --prefix to ./configure .
I am.
+ ./configure --prefix=/usr/cyrus --with-cyrus-prefix=/usr/cyrus
--enable-maintainer-mode --enable-idled --enable-nntp --enable-murder
--enable-replication --enable-unit-tests --without-snmp
> The resulting binaries have to be aware
> where the shared libraries are (when the shared libraries are not on
> standard locations) and probably using make install DESTDIR= with
> libtool is either wrong or implemented/handled wrong in Automake/libtool.
Well, that sucks.
--
Greg.
More information about the Cyrus-devel
mailing list