Verze symbolů glibc

Ladislav Vaiz spam na nagano.cz
Neděle Červenec 20 20:55:22 CEST 2008


Ahoj,
programu zkompilovaný proti glibc-2.3.6 používám mimo jiné funkci 
regexec. Na systému s glibc-2.3.2 se program dá spustit, ale při 
zavolání regexec program spadne s hláškou:
./a: relocation error: ./a: symbol regexec, version GLIBC_2.3.4 not 
defined in file libc.so.6 with link time reference

Připadne mi to, že v 2.3.4 došlo k nekompatibilní změně v rozhraní mezi 
aplikací a libc a libc se tímto jistí proti nesprávné funkci. Jeví se mi 
ale jako nedomyšlenost, že aplikace rovnou neodmítne běh proti starému 
glibc. Já funkci regexec volal při běžném použití programu, ale co když 
se to stane v nějaké téměř nepoužívané funkci?

Obejít tuto (domnívám se) chybu dokážu spuštěním regexec  při 
inicializaci aplikace, ale těžko se můžu spolehnout, že stejný problém 
nastane později při jiné kombinaci verzí na jiném symbolu. Jak tedy 
zajistit běh (to asi nepůjde) nebo alespoň odmítnout běh se starší verzí 
glibc? Jak zjistit konkrétní verzi glibc v době běhu?

Díky Láďa




Další informace o konferenci Linux