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
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
/**
* Linux, Unix and Mac OS X Shared Object loader class implementation
*/
#include "SoLib.h"
#include <dlfcn.h>
/**
* Instantiates the loader, attempts to dlopen the
* shared object lazily.
*/
SoLib::SoLib(const char* fileName) : so(NULL)
{
so = dlopen(fileName, RTLD_LAZY);
if (so == NULL) {
SharedLib::reportError(dlerror(), __FILE__, __LINE__, "SoLib::SoLib");
}
}
/**
* Just dlcloses the shared object
*/
void SoLib::Unload() {
if (so != NULL) {
dlclose(so);
so = NULL;
}
}
bool SoLib::LoadFailed() {
return so == NULL;
}
/**
* Just dlcloses the shared object
*/
SoLib::~SoLib()
{
Unload();
}
/**
* Attempts to locate the symbol address with dlsym
*/
void* SoLib::FindAddress(const char* symbol)
{
if (so != NULL) {
void* p = dlsym(so, symbol);
if (p == NULL) {
//SharedLib::reportError(dlerror(), __FILE__, __LINE__, "SoLib::FindAddress");
}
return p;
}
return NULL;
}
|