Dynamické zavádění knihoven v MAC OSX

vložil Radek Červinka 7. listopadu 2012 01:17

Kreténi. Tak jedině mohu nazvat autory OS X. Vysvětlím proč. Minule jsem popisoval jak staticky linkovat knihovny na OSX. V podstatě si musíte dát jen pozor, aby se při importu u symbolů přidalo podtržítko. Tj. pokud se exportovaná funkce jmenuje Foo, při importu musíte specifikovat název

_Foo

Ok, prostě taková úchylka, člověk se s tím smíří.

Nyní jsem potřeboval dynamicky zavádět knihovnu. OK, no problem - Delphi v SysUtils dává možnost použít knihovní funkce podobné jako jsou na Windows, tj.

LoadLibrary
GetProcAddress
FreeLibrary

které interně šikovně volají POSIX funkce dlopen, dlsym atd. Je to pěkné a v pohodě. Mimochodem, pokud to potřebujete pro Windows, tak navštivte povídání o LoadLibrary a GetProcAddress co jsem napsal dříve (funkce jsou v jednotce Windows).

Ale zpět. Takže statické linkování je s podtržítkem a funguje OK. Když jsem chtěl zkusit dynamické zavádění, tak se knihovna sice zavedla korektně, ale nefungovalo získání adresy. Přitom při použití nástroje nm, který je součástí instalace xcode (ale i normálního linuxu), to vypisovalo, že požadovaný symbol včetně podtržítka je dostupný.

Nezafungovalo ani přidání dalšího podtržítka, až jsem si pořádně přečetl man stránku pro dlsym a tam je nakonec uvedena malá noticka - že se předává jméno bez podtržítka. A pak to fungovalo. Takže pro statické linkování s a dynamicky bez.

Následně jsem narazil na popis stejného problému ohledně dlsym na OS X od Eli Bolinga (který, pokud to nevíte, je jeden z autorů Kylixu a OS X kompilátoru), který se tomu slušně řečeno podivoval. Určitě si to přečtěte - na linuxu se to chová trošku jinak - prostě chaos.

Jinak jsem byl překvapen, jak pěkně funguje uvedená podpora v RTL Delphi.

Tagy: , ,

Praxe

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců