GNU/Linux >> Znalost Linux >  >> Linux

Kompilace dynamické sdílené knihovny s g++

dlsym vrátí ukazatel na symbol. (Jako void* být obecný.) Ve vašem případě byste jej měli přetypovat na ukazatel funkce.

 double (*mycosine)(double); // declare function pointer
 mycosine = (double (*)(double)) dlsym(handle, "cos"); // cast to function pointer and assign

 double one = mycosine(0.0); // cos(0)

Takže toto je jeden z těchto vzácných případů, kdy je chyba kompilátoru dobrým vodítkem.;)


C umožňuje implicitní přetypování z void * na jakýkoli typ ukazatele (včetně ukazatelů funkcí); C++ vyžaduje explicitní přetypování. Jak říká leiflundgren, musíte přetypovat návratovou hodnotu dlsym() na typ ukazatele funkce, který potřebujete.

Mnoho lidí považuje syntaxi ukazatele funkcí v jazyce C za trapnou. Jedním z běžných vzorů je typdef ukazatele funkce:

typedef double (*cosine_func_ptr)(double);

Můžete definovat proměnnou ukazatele funkce cosine jako člen vašeho typu:

cosine_func_ptr cosine;

A přetypovat pomocí typu místo nešikovné syntaxe ukazatele funkce:

cosine = (cosine_func_ptr)dlsym(handle, "cos");

Linux
  1. Linux – celosystémové monitorování volání do funkce knihovny?

  2. Úvod do sdílených knihoven Linuxu (Jak vytvořit sdílené knihovny)

  3. Jak používat sdílenou paměť s Linuxem v C

  1. Dynamická sdílená knihovna C++ v systému Linux

  2. Jak zjistit, zda je daná sdílená knihovna postavena se symboly ladění nebo ne?

  3. Získejte názvy funkcí ve sdílené knihovně programově

  1. Převést statickou knihovnu na sdílenou?

  2. Statický odkaz funkce sdílené knihovny v gcc

  3. Jak inicializovat sdílenou knihovnu v Linuxu