14#include "arccore/base/String.h"
15#include "arccore/base/PlatformUtils.h"
17#include "arccore/base/internal/IDynamicLibraryLoader.h"
36class GlibDynamicLibrary
37:
public IDynamicLibrary
48 void close()
override;
49 void* getSymbolAddress(
const String& symbol_name,
bool* is_found)
override;
54 GModule* m_gmodule =
nullptr;
62class GlibDynamicLibraryLoader
63:
public IDynamicLibraryLoader
67 GlibDynamicLibraryLoader()
70 if (s ==
"1" || s ==
"true")
74 void build()
override {}
76 IDynamicLibrary* open(
const String& directory,
const String& name)
override
78 IDynamicLibrary* dl = _tryOpen(directory, name);
83#ifdef ARCCORE_OS_WIN32
84 dl = _tryOpen(directory, name +
".dll");
86#ifdef ARCCORE_OS_MACOS
87 dl = _tryOpen(directory,
"lib" + name +
".dylib");
92 dl = _tryOpen(
".", name);
97#ifdef ARCCORE_OS_WIN32
98 dl = _tryOpen(
".", name +
".dll");
100#ifdef ARCCORE_OS_MACOS
101 dl = _tryOpen(
".",
"lib" + name +
".dylib");
107 IDynamicLibrary* _tryOpen(
const String& directory,
const String& name)
109 const gchar* gdirectory =
reinterpret_cast<const gchar*
>(directory.
utf8().data());
110 const gchar* gname =
reinterpret_cast<const gchar*
>(name.
utf8().data());
111 gchar* full_path = g_module_build_path(gdirectory, gname);
113 std::cout <<
"** Load Dynamic Library '" << full_path <<
"'...";
115 GModule* gmodule = g_module_open(full_path, GModuleFlags());
119 std::cout <<
" NOT FOUND\n";
122 std::cout <<
" OK\n";
128 m_opened_libraries.insert(lib);
132 void closeLibraries()
override
135 std::vector<GlibDynamicLibrary*> libs(m_opened_libraries.begin(), m_opened_libraries.end());
136 for (
auto lib : libs) {
144 auto iter = m_opened_libraries.find(lib);
145 if (iter != m_opened_libraries.end())
146 m_opened_libraries.erase(iter);
151 bool m_is_verbose =
false;
152 std::set<GlibDynamicLibrary*> m_opened_libraries;
158void GlibDynamicLibrary::
163 bool is_ok = g_module_close(m_gmodule);
166 std::cerr <<
"WARNING: can not unload module\n";
167 m_manager->removeInstance(
this);
173void* GlibDynamicLibrary::
174getSymbolAddress(
const String& symbol_name,
bool* is_found)
180 const gchar* gname =
reinterpret_cast<const gchar*
>(symbol_name.utf8().data());
181 void* symbol_addr =
nullptr;
182 bool r = ::g_module_symbol(m_gmodule, gname, &symbol_addr);
191extern "C++" ARCCORE_BASE_EXPORT IDynamicLibraryLoader*
192createGlibDynamicLibraryLoader()
204 IDynamicLibraryLoader* global_default_loader = &glib_dynamic_loader;
207IDynamicLibraryLoader* IDynamicLibraryLoader::getDefault()
209 return global_default_loader;
Types et fonctions associés aux classes ArrayView et ConstArrayView.
Interface d'une chargeur dynamique de bibliothèque.
Chaîne de caractères unicode.
ByteConstArrayView utf8() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-