1/* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2004-2020 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18#include <stdio.h> 19#include <stdlib.h> 20 21#ifdef __WIN32__ 22#include <windows.h> 23#define dlopen(name, mode) LoadLibrary (TEXT (name)) 24#ifdef _WIN32_WCE 25# define dlsym(handle, func) GetProcAddress (handle, TEXT (func)) 26#else 27# define dlsym(handle, func) GetProcAddress (handle, func) 28#endif 29#define dlclose(handle) FreeLibrary (handle) 30#else 31#include <dlfcn.h> 32#endif 33 34 35void open_shlib () 36{ 37 void *handle; 38 void (*foo) (int); 39 40 handle = dlopen (SHLIB_NAME, RTLD_LAZY); 41 42 if (!handle) 43 { 44#ifdef __WIN32__ 45 fprintf (stderr, "error %d occurred\n", GetLastError ()); 46#else 47 fprintf (stderr, "%s\n", dlerror ()); 48#endif 49 exit (1); 50 } 51 52 foo = (void (*)(int))dlsym (handle, "foo"); 53 54 if (!foo) 55 { 56 fprintf (stderr, "%s\n", dlerror ()); 57 exit (1); 58 } 59 60 foo (1); // call to foo 61 foo (2); 62 63 dlclose (handle); 64} 65 66 67int main() 68{ 69 open_shlib (); 70 return 0; 71} 72