diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Foundation/include/Poco/SharedLibrary.h | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/SharedLibrary.h')
-rw-r--r-- | contrib/libs/poco/Foundation/include/Poco/SharedLibrary.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/SharedLibrary.h b/contrib/libs/poco/Foundation/include/Poco/SharedLibrary.h new file mode 100644 index 0000000000..52292c741e --- /dev/null +++ b/contrib/libs/poco/Foundation/include/Poco/SharedLibrary.h @@ -0,0 +1,144 @@ +// +// SharedLibrary.h +// +// Library: Foundation +// Package: SharedLibrary +// Module: SharedLibrary +// +// Definition of the SharedLibrary class. +// +// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Foundation_SharedLibrary_INCLUDED +#define Foundation_SharedLibrary_INCLUDED + + +#include "Poco/Foundation.h" + + +#if defined(hpux) || defined(_hpux) +#include "Poco/SharedLibrary_HPUX.h" +#elif defined(POCO_VXWORKS) +#include "Poco/SharedLibrary_VX.h" +#elif defined(POCO_OS_FAMILY_UNIX) +#include "Poco/SharedLibrary_UNIX.h" +#elif defined(POCO_OS_FAMILY_WINDOWS) && defined(POCO_WIN32_UTF8) +#include "Poco/SharedLibrary_WIN32U.h" +#elif defined(POCO_OS_FAMILY_WINDOWS) +#include "Poco/SharedLibrary_WIN32.h" +#endif + + +namespace Poco { + + +class Foundation_API SharedLibrary: private SharedLibraryImpl + /// The SharedLibrary class dynamically + /// loads shared libraries at run-time. +{ +public: + enum Flags + { + SHLIB_GLOBAL = 1, + /// On platforms that use dlopen(), use RTLD_GLOBAL. This is the default + /// if no flags are given. + /// + /// This flag is ignored on platforms that do not use dlopen(). + + SHLIB_LOCAL = 2 + /// On platforms that use dlopen(), use RTLD_LOCAL instead of RTLD_GLOBAL. + /// + /// Note that if this flag is specified, RTTI (including dynamic_cast and throw) will + /// not work for types defined in the shared library with GCC and possibly other + /// compilers as well. See http://gcc.gnu.org/faq.html#dso for more information. + /// + /// This flag is ignored on platforms that do not use dlopen(). + }; + + SharedLibrary(); + /// Creates a SharedLibrary object. + + SharedLibrary(const std::string& path); + /// Creates a SharedLibrary object and loads a library + /// from the given path. + + SharedLibrary(const std::string& path, int flags); + /// Creates a SharedLibrary object and loads a library + /// from the given path, using the given flags. + /// See the Flags enumeration for valid values. + + virtual ~SharedLibrary(); + /// Destroys the SharedLibrary. The actual library + /// remains loaded. + + void load(const std::string& path); + /// Loads a shared library from the given path. + /// Throws a LibraryAlreadyLoadedException if + /// a library has already been loaded. + /// Throws a LibraryLoadException if the library + /// cannot be loaded. + + void load(const std::string& path, int flags); + /// Loads a shared library from the given path, + /// using the given flags. See the Flags enumeration + /// for valid values. + /// Throws a LibraryAlreadyLoadedException if + /// a library has already been loaded. + /// Throws a LibraryLoadException if the library + /// cannot be loaded. + + void unload(); + /// Unloads a shared library. + + bool isLoaded() const; + /// Returns true iff a library has been loaded. + + bool hasSymbol(const std::string& name); + /// Returns true iff the loaded library contains + /// a symbol with the given name. + + void* getSymbol(const std::string& name); + /// Returns the address of the symbol with + /// the given name. For functions, this + /// is the entry point of the function. + /// Throws a NotFoundException if the symbol + /// does not exist. + + const std::string& getPath() const; + /// Returns the path of the library, as + /// specified in a call to load() or the + /// constructor. + + static std::string suffix(); + /// Returns the platform-specific filename suffix + /// for shared libraries (including the period). + /// In debug mode, the suffix also includes a + /// "d" to specify the debug version of a library + /// (e.g., "d.so", "d.dll") unless the library has + /// been compiled with -DPOCO_NO_SHARED_LIBRARY_DEBUG_SUFFIX. + + static bool setSearchPath(const std::string& path); + /// Adds the given path to the list of paths shared libraries + /// are searched in. + /// + /// Returns true if the path was set, otherwise false. + /// + /// Currently only supported on Windows, where it calls + /// SetDllDirectory(). On all other platforms, does not + /// do anything and returns false. + +private: + SharedLibrary(const SharedLibrary&); + SharedLibrary& operator = (const SharedLibrary&); +}; + + +} // namespace Poco + + +#endif // Foundation_SharedLibrary_INCLUDED |