1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <dlfcn.h> 6 #include <stdio.h> 7 8 extern "C" bool Zoo() { 9 printf("%s: Entering\n", __FUNCTION__); 10 void* bar_lib = dlopen("libbar.so", RTLD_NOW); 11 if (!bar_lib) { 12 fprintf(stderr, "Could not libbar.so: %s\n", dlerror()); 13 return false; 14 } 15 printf("%s: Opened libbar.so @%p\n", __FUNCTION__, bar_lib); 16 17 void (*bar_func)(); 18 19 bar_func = reinterpret_cast<void (*)()>(dlsym(bar_lib, "Bar")); 20 if (!bar_func) { 21 fprintf(stderr, "Could not find 'Bar' symbol in libbar.so\n"); 22 return false; 23 } 24 printf("%s: Found 'Bar' symbol at @%p\n", __FUNCTION__, bar_func); 25 26 // Call it. 27 printf("%s: Calling Bar()\n", __FUNCTION__); 28 (*bar_func)(); 29 30 printf("%s: Closing libbar.so\n", __FUNCTION__); 31 dlclose(bar_lib); 32 33 printf("%s: Exiting\n", __FUNCTION__); 34 return true; 35 } 36