Portál AbcLinuxu, 14. července 2025 02:00


Dotaz: Použití symbolu z aplikace v .so knihovně

Luboš Doležel (Doli) avatar 25.7.2005 22:15 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Použití symbolu z aplikace v .so knihovně
Přečteno: 98×
Odpovědět | Admin
Ahoj,

je mi jasný, že to o co se snažím je asi zvěrstvo, ale chtěl jsem to vyzkoušet.

Jde mi o to, jestli je možné, aby .so knihovna použila symbol (funkci) existující v aplikaci, která danou knihovnu načetla - jinak řečeno: je možné, aby loader hledal symbol nejen v načtených knihovnách, ale i v hlavní binárce? Skončím na symbol lookup error, undefined symbol.

Snad jsem to dobře popsal, popisuje se to trochu krkolomně :-)
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.7.2005 22:47 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Použití symbolu z aplikace v .so knihovně
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je nejen možné, ale běžně to v praxi používám ;-) Zejména u dlopen()ovaných modulů, které se pak nelinkují s tisícem vlastních knihoven, stejných jako všechny ostatní moduly a aplikace sama. Navíc se pak rychleji linkují i dlopen()ují. A předem to vylučuje možnost, že se za běhu budou chtít slinkovat s jinou verzí knihovny než aplikace. Nefunguje to na všech systémech, tj. nefunguje to např. na Darwinovi a Win32 (nejspíš), funguje to např. na Linuxu, *BSD a Solarisu.

Ale pokud chceš o něco méně ulítlý příklad, tak librecode má nedefinovaný symbol program_name (který používá v chybových hláškách) a program, který se s ní linkuje, ho musí definovat.

Takže spíš napiš, jak to linkuješ...
25.7.2005 22:51 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Použití symbolu z aplikace v .so knihovně
Jo, pokud to mají být přímo symboly z aplikace, ne z další knihovny, tak potřebuješ při linkování --export-dynamic, nebo tak něco.
Luboš Doležel (Doli) avatar 25.7.2005 23:57 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Použití symbolu z aplikace v .so knihovně
Super, to je ono. Jenom (pokud tohle bude hledat někdo další) upřesním, že je to -export-dynamic (s jednou pomlčkou).

P.S.: nevím proč, ale už dopředu jsem tušil, že přijde Yeti a bude něco vědět ;-)
Pavel Stárek avatar 25.7.2005 22:50 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Použití symbolu z aplikace v .so knihovně
Odpovědět | | Sbalit | Link | Blokovat | Admin
No je to tedy divné, ale dle mne by to asi jít mohlo. To neco.so by muselo zavolat dlopen("/cesta/k/binarce") a pak volat pomocí dlsym funkce z binárky. Ovšem jak přeložit (s jakými přepínači) tu binárku aby byla spustitelná a zároveň aby exportovala ty funkce. Trošku to je popsáno v man dlopen.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.