/*========================================================================= Program: bbtk Module: $RCSfile: bbtkDynamicLibraryHandling.h,v $ Language: C++ Date: $Date: 2008/01/22 15:02:00 $ Version: $Revision: 1.1.1.1 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See doc/license.txt or http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ /** *\file *\brief Dynamic library loading stuff (OS dependent) */ // System dependent includes for loading dynamic libraries #if defined(__GNUC__) // GCC compiler // dlopen, dlsym, etc. #include // dlopen loading mode : // instant/delayed symbol resolution #ifndef BBTK_RTLD_NOW # define BBTK_RTLD_TIME RTLD_LAZY #else # define BBTK_RTLD_TIME RTLD_NOW #endif // local/global symbol loading // one **MUST** use RTLD_GLOBAL in order to have // the RTTI mechanism travel correctly across packages (typeid,dynamic_cast...) // however this can cause problems (symbol clashes) ... // see : // http://gcc.gnu.org/faq.html#dso // http://gcc.gnu.org/ml/gcc/2003-04/msg00256.html // http://gcc.gnu.org/ml/gcc-bugs/2003-10/msg02771.html #ifndef BBTK_RTLD_LOCAL # define BBTK_RTLD_SCOPE RTLD_GLOBAL #else # define BBTK_RTLD_SCOPE RTLD_LOCAL #endif // dl handler type namespace bbtk { typedef void* DynamicLibraryHandler; } #elif defined(_WIN32) // Win32 // HINSTANCE, LoadLibrary, etc. definition #include "Windows.h" // dl handler type namespace bbtk { typedef HINSTANCE DynamicLibraryHandler; } #else ERROR !! DYNAMIC LIBRARY LOADING NOT IMPLEMENTED FOR YOUR SYSTEM #endif