I have an application, which does a error when I try to run it:
/lib/libc.so.6: version `GLIBC_2.7' not found
But the only symbol it needs from glibc 2.7 is
__isoc99_sscanf@@GLIBC_2.7
I want to write a small single function "library" with this symbol as alias to __sscanf()
How can I do this with gcc/ld?
My variant is not accepted because "@@" symbols
int __isoc99_sscanf@@GLIBC_2.7(const char *, const char *, ...) __attribute__((alias("__sscanf")));
second my variant is
#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");
but it ends with "version node not found for symbol __isoc99_sscanf@@GLIBC_2.7" error from linker.
Your second version works with this script:
GLIBC_2.7 {
global: __isoc99_sscanf;
local: *;
};
Using -Wl,--version-script=script.txt
, however, I don't know how to access the original sscanf@GLIBC_2.4
.
Anyway, perhaps you would want to use -D_GNU_SOURCE
instead; to avoid __isoc99_sscanf
altogether.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With