1

I load a .so library using dlopen(). The library calls myfunc(). The function is available in version 1.0 of the loader. So calling myfunc() works. In version 0.9 however, there is no myfunc(), and libdl shows error about lazy binding failure.

Can I, within the so. library, check if myfunc() exists, and only then call the function? The function is not mandatory, not important, I can safely skip calling it if loader is in version 0.9 or lower.

One Other
  • 43
  • 5

1 Answers1

1

On and ELF platform, you can use weak unresolved reference to achieve your goal:

// libfoo.c
extern int myfunc() __attribute__((weak));
int foo()
{
   if (&myfunc == NULL) {
     printf("myfunc is not defined\n");
   } else {
     // myfunc is available, call it
     printf ("myfunc returns %d\n", myfunc());
   }
}
Employed Russian
  • 199,314
  • 34
  • 295
  • 362