libsasl2.so.2: no version information available
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Sobota Září 30 11:29:35 CEST 2006
On Tue, 26 Sep 2006, Ondrej Koala Vacha wrote:
> > Hlásí ldd -v /usr/local/lib/libsasl2.so.2 něco podobného?
> Ne:
> > Co říká na objdump -T /usr/local/lib/libsasl2.so.2? Jsou tam mezi adresou
> > a symbolem názvy verzí jako GLIBC_2.0?
> Zda se ze ano:
Curiouser and curiouser. Raději jsem se podíval do zdrojáků a našel jsem
tohle (funkce match_symbol v elf/dl-version.c):
if (__builtin_expect (map->l_info[VERSYMIDX (DT_VERDEF)] == NULL, 0))
{
/* The file has no symbol versioning. I.e., the dependent
object was linked against another version of this file. We
only print a message if verbose output is requested. */
if (verbose)
{
/* XXX We cannot translate the messages. */
errstring = make_string ("\
no version information available (required by ", name, ")");
goto call_cerror;
}
return 0;
}
Aha! Takže je to asi trochu jinak. Tady to vypadá, že tím chtěl básník
říct, že program (/usr/cyrus/bin/imapd) byl slinkovaný s libsasl2.so.2, ve
kterém byly nějaké *exportované* verzované symboly, ale teď je mu
předkládána varianta této knihovny, kde žádné verzované symboly nejsou.
Této diskrepance by se skutečně dalo dosáhnout různou kompilací, či
přesněji linkováním, libsasl2.so.2. Jednou s --version-script, podruhé
bez něj.
Zkuste to ldd pustit s LD_DEBUG=versions (viz LD_DEBUG=help
/lib/ld-linux.so.2).
Zkuste ještě jednou pustit ten objdump -T na /usr/local/lib/libsasl2.so.2,
/usr/cyrus/bin/imapd, a pokud je k dispozici i libsasl2.so.2 použitý pro
výrobu toho imapd, tak i na něj a porovnat symboly exportované
z libsasl2.so.2 a importované do imapd.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux