testloadso.c (2295B)
1/* 2 Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org> 3 4 This software is provided 'as-is', without any express or implied 5 warranty. In no event will the authors be held liable for any damages 6 arising from the use of this software. 7 8 Permission is granted to anyone to use this software for any purpose, 9 including commercial applications, and to alter it and redistribute it 10 freely. 11*/ 12 13/* Test program to test dynamic loading with the loadso subsystem. 14*/ 15 16#include <stdio.h> 17#include <stdlib.h> 18#include <string.h> 19 20#include "SDL.h" 21 22typedef int (*fntype) (const char *); 23 24int 25main(int argc, char *argv[]) 26{ 27 int retval = 0; 28 int hello = 0; 29 const char *libname = NULL; 30 const char *symname = NULL; 31 void *lib = NULL; 32 fntype fn = NULL; 33 34 if (argc != 3) { 35 const char *app = argv[0]; 36 SDL_Log("USAGE: %s <library> <functionname>\n", app); 37 SDL_Log(" %s --hello <lib with puts()>\n", app); 38 return 1; 39 } 40 41 /* Initialize SDL */ 42 if (SDL_Init(0) < 0) { 43 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); 44 return 2; 45 } 46 47 if (strcmp(argv[1], "--hello") == 0) { 48 hello = 1; 49 libname = argv[2]; 50 symname = "puts"; 51 } else { 52 libname = argv[1]; 53 symname = argv[2]; 54 } 55 56 lib = SDL_LoadObject(libname); 57 if (lib == NULL) { 58 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadObject('%s') failed: %s\n", 59 libname, SDL_GetError()); 60 retval = 3; 61 } else { 62 fn = (fntype) SDL_LoadFunction(lib, symname); 63 if (fn == NULL) { 64 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadFunction('%s') failed: %s\n", 65 symname, SDL_GetError()); 66 retval = 4; 67 } else { 68 SDL_Log("Found %s in %s at %p\n", symname, libname, fn); 69 if (hello) { 70 SDL_Log("Calling function...\n"); 71 fflush(stdout); 72 fn(" HELLO, WORLD!\n"); 73 SDL_Log("...apparently, we survived. :)\n"); 74 SDL_Log("Unloading library...\n"); 75 fflush(stdout); 76 } 77 } 78 SDL_UnloadObject(lib); 79 } 80 SDL_Quit(); 81 return retval; 82}