Problemy pri statickem linkovani

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Úterý Březen 7 13:06:08 CET 2000


On Mon, 6 Mar 2000, Mila Kuchta wrote:

> > > nekomu, ze pri dynamickem linkovani projede a funguje vse bez
> > > problemu, zatimco pri statickem si nektere knihovni funkce stezuji
> > > "undefined reference to _IO_stdout_ a _IO_stderr_...
> > 
> > vypada to, ze obsah staticke a dynamicke knihovny je docela rozdilny?!
> 
> To je u stejne verze glibc, glibc-devel dost neprijemne, ze? Vi nekdo jak to
> resit?

ty symboly (_IO_std..._) jsou definovany v libio/oldstdfiles.c...

DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES);
DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_.file, _IO_NO_READS);
DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file,
            _IO_NO_READS+_IO_UNBUFFERED);

jenze kdyz se clovek podiva do libio/Makefile, tak zjisti, ze se tento
soubor dava pouze do .so...

shared-only-routines = oldiofopen oldiofdopen oldiofclose oldfileops    \
                       oldstdfiles oldiopopen oldpclose oldtmpfile
 
pravdepodobne vysvetleni: symboly _IO_std..._ jsou "backward binary
compatibility only" (nejspis backward comp. s verzi 2.0) a ve staticke
knihovne nejsou protoze 1. se nepredpokladalo, ze by to nekdo potreboval,
2. pouziva to triky linkeru, ktere by stejne pri statickem linkovani
nefungovaly (nehodici se skrtnete)

mimochodem...jak jsem se tak dival na oldstdfiles.c, tak jsem opravdu
nepochopil, jak by to melo fungovat, kdyby cast programu pouzivala stary
interfejs a cast novy (leda by nove programy explicitne pristupovaly na
_IO_2_1_std..._)

"reseni": pouzit libc.a od glibc 2.0 nebo do programu nejak namontovat
ekvivalent oldstdfiles.c a spol.

--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