Вы правы в том, что glibc использует управление версиями символов. Если вам интересно, реализация версии управления символами, представленная в glibc 2.1, описана here и является расширением схемы управления версиями символов Sun, описанной here.
Один из вариантов - статически связать ваш двоичный файл. Вероятно, это самый простой вариант.
Вы также можете создать свой исполняемый файл в среде сборки корневой, или с помощью glibc- нового => glibc- старого кросса-компилятора.
Согласно сообщению Linking to Older Versioned Symbols (glibc) в http://www.trevorpounds.com блоге, можно заставить любой символ быть связан с более старой, так долго, как это действует, используя один и тот же .symver
псевдо-оп, который используется для определения о версиях символов в первую очередь. Следующий пример вычитается из blog post.
В следующем примере используется реальный путь glibc, но он уверен, что он связан с более старой версией 2.2.5.
#include <limits.h>
#include <stdlib.h>
#include <stdio.h>
__asm__(".symver realpath,[email protected]_2.2.5");
int main()
{
char* unresolved = "/lib64";
char resolved[PATH_MAX+1];
if(!realpath(unresolved, resolved))
{ return 1; }
printf("%s\n", resolved);
return 0;
}
Argh это одна из тех действительно раздражающих проблем с Linux, например, когда решение всегда «вы не должны этого делать», что, конечно, означает, что «это не работает, и никто еще не исправил его». – Timmmm
Люди жаловались на аддон DLL на Windows. Я помню, что Linux * some * aficionados пытается принести это как ужасный пример из мира Windows. Когда я впервые столкнулся с * этим * развитием Linux более десяти лет назад, все, что я делал, - это похоронить мое лицо в моих руках. – 0xC0000022L