jak udelat DSO s prilinkovanou knihovnou staticky?

Václav Ovsík vaclav.ovsik na i.cz
Čtvrtek Červen 24 13:51:40 CEST 2004


Ja vedel, ze se na to nakonec chytne spravny odbornik :-)

On Thu, Jun 24, 2004 at 12:37:03AM +0200, Pavel Kankovsky wrote:
> Asi by stalo za pokus zkusit -Bsymbolic, aby daval prednost symbolum
> definovanym primo v tom samem DSO pred temi, co jsou definovane jinde.
 
Cha, chaaa. No jo, todle zabralo. Trochu jsem se lekl, kdyz to na me
vypsalo kvanta undefined reference z Perlu a OpenSSL, ze to ld povazuje
za chybu, ale DSO vypadlo. A dela to presne co potrebuju, tedy ty
reference do openssl jsou vyresene staticky. Sice se dal exportujou vsechny
globalni symboly, ale zatim chci verit tomu, ze libcrypto.so.0.9.6 se
natahuje prvni a bude mit vsude prednost.
Process na drzku nepada a chova se slusne!

-Bsymbolic je trefa do cerneho, diky. Tuhle volbu jsem nejak prehledl,
nebo nepochopil pri letmem pohledu, nebo me odradil nejspis jeji nazev.

> Take bych misto --retain-symbols-file zkusil --version-script.

No, kdyz to ted funguje necham si to do zasoby na priste. :-)

> > Navic jsem zas narazil na dalsi problem. :-) Kdyz jsem OpenSSL
> > prelozil s podporou debugovani a XS taky s -g nasledne slinkoval XS
> > pomoci ld, tak to DynaLoader nenatahne, ze mu chybi symbol stat. [...]
> > Doted jsem si myslel, ze linkovat muzu plnohodnotne pomoci ld z
> > binutils (no mozna by to slo, ale asi by se musel predhodit jeste
> > nejakej objekt z gcc-lib).
> 
> Musi se to slinkovat s /usr/lib/libc_nonshared.a.
> Coz tedy neni treba delat explicitne (ani to neni zadouci), ale staci
> pri linkovani pomoci ld pridat -lc (viz obsah /usr/lib/libc.so).

No jo, vy to mate vsechno vychytany. Koukam na libcrypto.a bez
debugrovacich informaci a tam je odkaz na __xstat a ve verzi
s zapnutym debugrovanim je odkaz na stat.
Aha, uz mi to zacina dochazet. V sys/stat.h je stat definovane jako
inline funkce, ktera vola __xstat. Takze kompilator se zapnutou
optimalizaci to nahradi tim __xstat, jinak to zustava stat.
Ted uz jenom vedet, proc neni v libc.so.6 i stat, ale jenom __xstat,
a proc je to vystrceny do libc_nonshared.a. Ackoliv, zas nemusim vedet
vsechno. :-)

Hmm, zda se, ze to linkovani klapne, kdyz dam:

ld  -shared -L/usr/local/lib webCA.o -Bsymbolic \
     -o blib/arch/auto/webCA/webCA.so x509/libx509.a -lc \
     -static -L/usr/local//lib -lcrypto -lc_nonshared

> Kdyz uz do te konkretni instance Apache strkate nejake DSO s OpenSSL
> 0.9.8, tak uz asi ani tak moc nevadi, kdyz s ni pojede i ten mod_ssl.

Ta 0.9.8 je zas dost beta a treba v debugrovaci podobe neprojde make test.
Na to co ja potrebuju - nejake hratky s PKI to staci.
Casem mozna zkusim pouzit radeji Botan.
Diky.
-- 
Zito


Další informace o konferenci Linux