| #include <dlfcn.h> | 
 | #include <stdio.h> | 
 |  | 
 | // Mark foo and bar weak so that Clang allows the run-time linker to decide which DSO's symbol to | 
 | // use. | 
 |  | 
 | __attribute__((weak)) extern "C" void foo() { | 
 |   printf("foo lib3\n"); | 
 |   void (*next)(void) = reinterpret_cast<void (*)()>(dlsym(RTLD_NEXT, "foo")); | 
 |   if (next != nullptr) next(); | 
 | } | 
 |  | 
 | __attribute__((weak)) extern "C" void bar() { | 
 |   printf("bar lib3\n"); | 
 |   void (*next)(void) = reinterpret_cast<void (*)()>(dlsym(RTLD_NEXT, "bar")); | 
 |   if (next != nullptr) next(); | 
 | } | 
 |  | 
 | void lib3_call_funcs() { | 
 |   printf("lib3_call_funcs\n"); | 
 |   foo(); | 
 |   bar(); | 
 | } |