blob: 3c7d3b459d1b0172e75bb87efc382aebff5738e9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
/*=========================================================================
Program: CMake - Cross-Platform Makefile Generator
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
See Copyright.txt or http://www.cmake.org/HTML/Copyright.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.
=========================================================================*/
// .NAME cmDynamicLoader - class interface to system dynamic libraries
// .SECTION Description
// cmDynamicLoader provides a portable interface to loading dynamic
// libraries into a process.
#ifndef __cmDynamicLoader_h
#define __cmDynamicLoader_h
#include "cmStandardIncludes.h"
// Ugly stuff for library handles
// They are different on several different OS's
#if defined(__hpux)
#include <dl.h>
typedef shl_t cmLibHandle;
#elif defined(_WIN32)
#include <windows.h>
typedef HMODULE cmLibHandle;
#elif defined(__APPLE__)
#include <AvailabilityMacros.h>
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1030
#include <mach-o/dyld.h>
typedef NSModule cmLibHandle;
#else
typedef void* cmLibHandle;
#endif
#else
typedef void* cmLibHandle;
#endif
// Return type from cmDynamicLoader::GetSymbolAddress.
typedef void (*cmDynamicLoaderFunction)();
class cmDynamicLoader
{
public:
// Description:
// Load a dynamic library into the current process.
// The returned cmLibHandle can be used to access the symbols in the
// library.
static cmLibHandle OpenLibrary(const char*);
// Description:
// Attempt to detach a dynamic library from the
// process. A value of true is returned if it is successful.
static int CloseLibrary(cmLibHandle);
// Description:
// Find the address of the symbol in the given library
static cmDynamicLoaderFunction GetSymbolAddress(cmLibHandle, const char*);
// Description:
// Return the library prefix for the given architecture
static const char* LibPrefix();
// Description:
// Return the library extension for the given architecture
static const char* LibExtension();
// Description:
// Return the last error produced from a calls made on this class.
static const char* LastError();
// Description:
// Flush the cache of dynamic loader.
static void FlushCache();
protected:
cmDynamicLoader() {};
~cmDynamicLoader() {};
private:
cmDynamicLoader(const cmDynamicLoader&); // Not implemented.
void operator=(const cmDynamicLoader&); // Not implemented.
};
#endif
|