libg++.so

Stanislav Meduna stano na trillian.eunet.sk
Sobota Prosinec 19 11:13:30 CET 1998


On 18 Dec 1998 16:06:36 +0100, Pavel Honzatko wrote:

: Jak se pracuje se shared knihovnama?
: Dokazu si predstavit dlopen(), dlsym()
: pro c-funkce, ale jiz ne praci s objektama
: pro libg++.

Fungovat to funguje (pouzivame to v jednom projekte,
ovsem iba na volanie metod, ktorych parametrami
mozu byt objekty; do veci ako new volacoho z tej
kniznice sa nepustame).

Bud si treba napisat wrapper funkcie v C a ist cez
extern C, alebo si treba ziadat manglovane
meno a dat si velmi dobry pozor, aby kniznica
a kod boli kompilovane tym istym kompilatorom
a s rovnakou verziou headrov dotycnych objektov.

Priatelom zufaleho programatora je v tomto pripade nm:

% nm /usr/lib/libg++.so.2.7.2.8 | grep ACG
000289d0 T _._3ACG
00028b24 T __3ACGRC3ACG
00028818 T __3ACGUii
00028af8 T __as__3ACGRC3ACG
00032fe8 D _vt.3ACG
00028a20 T asLong__3ACG
000288d4 T reset__3ACG

% nm -C /usr/lib/libg++.so.2.7.2.8 | grep ACG
000289d0 T ACG::~ACG(void)
00028b24 T ACG::ACG(ACG const &)
00028818 T ACG::ACG(unsigned int, int)
00028af8 T ACG::operator=(ACG const &)
00032fe8 D ACG virtual table
00028a20 T ACG::asLong(void)
000288d4 T ACG::reset(void)

Symbol vrateny dlsym() treba akurat spravne
ocastovat. V podstate je to poriadna prasacina,
ktorej je najlepsie sa vyhnut, ak sa len trochu da.

: Jak vytvorim, rekneme, instanci ACG, zavolam
: metodu ()...???

Metodu treba zavolat s prvym parametrom this.
S new to asi bude horsie - obavam sa, ze bude
treba mallocovat sizeof (lenze kde ho vziat,
ak nemam header, ze ano) a potom explicitne
zavolat konstruktor. Este vacsia zabava
budu virtualne funkcie - tam totiz treba
vidiet do virtual table a urobit to cisto
je viac-menej nemozne.

Ja by som na to siel cestou C wrapperov, ktore
su sucastou tej kniznice, minimalne pre
konstrukciu/destrukciu a virtualne funkcie,
ale najradsej pre vsetky pouzivane funkcie.
Pre tieto veci je interface len cez
signatury metod trochu priuzky.

Zdravi
-- 
					Stano



Další informace o konferenci Linux