2 #define GDYNAMICLIB_H 1
17 static dlhandle load_lib(
const std::string &path);
19 static void close_lib(
dlhandle handle);
22 #define EC__DLNOTFOUND 1001
23 #define EC__FACTORYNOTFOUND 1002
24 #define EC__DLHANDLENOTFOUND 1003
34 std::string dlFileName;
36 bool doesFileExists(
const std::string &name) {
38 return (stat(name.c_str(), &buffer) == 0);
41 std::shared_ptr<GLogger> log;
48 DynamicLib(std::shared_ptr<GLogger> logger, std::string path) : dlFileName(path), log(std::move(logger)),
handle(nullptr) {
50 log->debug(CONSTRUCTOR,
"Instantiating ", path);
51 log->debug(NORMAL,
"Trying ", dlFileName);
54 if (!doesFileExists(dlFileName)) {
55 log->debug(NORMAL, dlFileName,
"Not found...");
56 dlFileName = std::string(getenv(
"GEMC")) +
"/lib/" + path;
57 log->debug(NORMAL,
"Trying ", dlFileName);
61 if (!doesFileExists(dlFileName)) {
62 log->debug(NORMAL, dlFileName,
"Not found...");
63 dlFileName = std::string(getenv(
"GEMC")) +
"/lib64/" + path;
64 log->debug(NORMAL,
"Trying ", dlFileName);
67 if (doesFileExists(dlFileName)) {
68 handle = load_lib(dlFileName);
69 log->info(0,
"Loaded ", dlFileName);
71 char const *
const dlopen_error = dlerror();
85 log->debug(DESTRUCTOR,
"Destroying ", dlFileName);
93 static dlhandle load_lib(
const std::string &path) {
95 return dlopen(path.data(), RTLD_NOW);
101 static void close_lib(
dlhandle handle) {
#define EC__DLHANDLENOTFOUND
Structure to load dynamically symbols from a shared library.
DynamicLib(std::shared_ptr< GLogger > logger, std::string path)