gcc/ld - create a new libc.so with __isoc99_sscanf @ @ GLIBC_2.7 symbol из glibc.2.6

У меня есть приложение, которое выдает ошибку, когда я пытаюсь его запустить:

/lib/libc.so.6: version `GLIBC_2.7' not found

Но единственный символ, который ему нужен, из glibc 2.7 is

__isoc99_sscanf@@GLIBC_2.7 

Я хочу написать небольшую "библиотеку" одной функции с этим символом в качестве псевдонима для __sscanf ()

Как я могу сделать это с помощью gcc / ld?

Мой вариант не принят, потому что "@@" символы

 int __isoc99_sscanf@@GLIBC_2.7(const char *, const char *, ...) __attribute__((alias("__sscanf")));

второй мой вариант -

#include <stdarg.h>
int __isoc99_sscanf1(const char *a, const char *b, va_list args)
{
   int i;
   va_list ap;
   va_copy(ap,args);
   i=sscanf(a,b,ap);
   va_end(ap);
   return i;
}

   // __asm__(".symver __isoc99_sscanf,__isoc99_sscanf@@GLIBC_2.7");
    __asm__(".symver __isoc99_sscanf1,__isoc99_sscanf@@GLIBC_2.7");

, но он заканчивается на "узел версии не найден для символа __isoc99_sscanf @@GLIBC_2.7" error from linker.

6
задан osgx 11 January 2012 в 23:15
поделиться