Libtool and Support for Shared Libraries (3)
Bron Gondwana
brong at fastmail.fm
Thu Jun 7 09:24:40 EDT 2012
On Tue, Jun 5, 2012, at 12:49 PM, Дилян Палаузов wrote:
> Hello,
>
> now libcyrus and libcyrus_min are compiled once as shared libraries,
> once under perl/ as non-static convenience libraries,
> perl/imap/IMAP.so and perl/sieve/managesieve/managesieve.so link
> statically with the non-static convenience libraries,
> so that IMAP.so and managesieve.so do need neither libcyrus and
> libcyrus_min at run time nor the RPATH with those libraries at tun time.
Talking about dependencies across random shit - I've just started trying
to backport the autocreate and autosieve libraries - and it's a right
pain. They need sieve/libsieve.a linked in to EVERYWHERE that has
mboxlist linked it by the looks of things, which is painful:
https://github.com/brong/cyrus-imapd/tree/autofoo
gcc -fPIC -g -W -Wall -Wextra -o imap/arbitron imap/arbitron.o imap/cli_fatal.o imap/mutex_fake.o sieve/libsieve.a imap/libimap.a lib/libcyrus.a lib/libcyrus_min.a -lsasl2 -lssl -lcrypto -ldl -ldb-4.8 -lpcre -lpcreposix -lz -lcom_err -luuid -ldl -ldb-4.8 -lpcre -lpcreposix -lz
imap/libimap.a(autosieve.o): In function `autoadd_sieve':
/home/brong/src/cyrus-imapd/imap/autosieve.c:233: undefined reference to `sieve_generate_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:237: undefined reference to `sieve_script_free'
/home/brong/src/cyrus-imapd/imap/autosieve.c:243: undefined reference to `sieve_emit_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:247: undefined reference to `sieve_free_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:248: undefined reference to `sieve_script_free'
/home/brong/src/cyrus-imapd/imap/autosieve.c:255: undefined reference to `sieve_free_bytecode'
/home/brong/src/cyrus-imapd/imap/autosieve.c:256: undefined reference to `sieve_script_free'
imap/libimap.a(autosieve.o): In function `is_script_parsable':
/home/brong/src/cyrus-imapd/imap/autosieve.c:437: undefined reference to `sieve_interp_alloc'
/home/brong/src/cyrus-imapd/imap/autosieve.c:443: undefined reference to `sieve_register_redirect'
/home/brong/src/cyrus-imapd/imap/autosieve.c:448: undefined reference to `sieve_register_discard'
/home/brong/src/cyrus-imapd/imap/autosieve.c:453: undefined reference to `sieve_register_reject'
/home/brong/src/cyrus-imapd/imap/autosieve.c:458: undefined reference to `sieve_register_fileinto'
/home/brong/src/cyrus-imapd/imap/autosieve.c:463: undefined reference to `sieve_register_keep'
/home/brong/src/cyrus-imapd/imap/autosieve.c:469: undefined reference to `sieve_register_imapflags'
/home/brong/src/cyrus-imapd/imap/autosieve.c:475: undefined reference to `sieve_register_size'
/home/brong/src/cyrus-imapd/imap/autosieve.c:481: undefined reference to `sieve_register_header'
/home/brong/src/cyrus-imapd/imap/autosieve.c:487: undefined reference to `sieve_register_envelope'
/home/brong/src/cyrus-imapd/imap/autosieve.c:493: undefined reference to `sieve_register_vacation'
/home/brong/src/cyrus-imapd/imap/autosieve.c:499: undefined reference to `sieve_register_notify'
/home/brong/src/cyrus-imapd/imap/autosieve.c:505: undefined reference to `sieve_register_parse_error'
/home/brong/src/cyrus-imapd/imap/autosieve.c:516: undefined reference to `sieve_script_parse'
/home/brong/src/cyrus-imapd/imap/autosieve.c:522: undefined reference to `sieve_script_free'
/home/brong/src/cyrus-imapd/imap/autosieve.c:529: undefined reference to `sieve_interp_free'
collect2: ld returned 1 exit status
make[2]: *** [imap/arbitron] Error 1
I'm thinking maybe what's actually needed here is moving all the
automagic out into a separate library which only gets included by the
three daemons which actually need it (lmtp which already has sieve,
imapd and pop3d)
Any other ideas?
Bron.
--
Bron Gondwana
brong at fastmail.fm
More information about the Cyrus-devel
mailing list