| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <dlfcn.h> |
| #include <stdio.h> |
| |
| #define LIB_NAME "libcrazy_linker_tests_libbar.so" |
| |
| extern "C" bool Zoo() { |
| printf("%s: Entering\n", __FUNCTION__); |
| void* bar_lib = dlopen(LIB_NAME, RTLD_NOW); |
| if (!bar_lib) { |
| fprintf(stderr, "Could not open %s: %s\n", LIB_NAME, dlerror()); |
| return false; |
| } |
| printf("%s: Opened %s @%p\n", __FUNCTION__, LIB_NAME, bar_lib); |
| |
| void (*bar_func)(); |
| |
| bar_func = reinterpret_cast<void (*)()>(dlsym(bar_lib, "Bar")); |
| if (!bar_func) { |
| fprintf(stderr, "Could not find 'Bar' symbol in %s\n", LIB_NAME); |
| return false; |
| } |
| printf("%s: Found 'Bar' symbol at @%p\n", __FUNCTION__, bar_func); |
| |
| // Call it. |
| printf("%s: Calling Bar()\n", __FUNCTION__); |
| (*bar_func)(); |
| |
| printf("%s: Closing %s\n", __FUNCTION__, LIB_NAME); |
| dlclose(bar_lib); |
| |
| printf("%s: Exiting\n", __FUNCTION__); |
| return true; |
| } |