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