Releases: martin-olivier/dylib
2.2.1
2.2.0
Changelog
- feat:
MinGW
support, requested by @lonnietc - feat:
CPack
support, requested by @KOLANICH - fix:
WIN32_LEAN_AND_MEAN
macro redefinition, thanks to @Aleksoid1978 - fix:
CMake
improvements, thanks to @rmaxi-me - fix:
workflows
improvements - fix: cleaner documentation
2.1.0
Changelog
- feat:
std::filesystem::path
support in dylib contructor - feat:
dylib::add_filename_decorations
anddylib::no_filename_decorations
constants - feat:
dylib::get_symbol
public member function - feat:
dylib::native_symbol_type
public member type definition - feat: CI now checks both c++11 and c++17
- fix: protected dylib members have been renamed
- fix: timeout issues on windows CI
- fix: cleaner documentation
2.0.0
Changelog
Dylib class is now RAII compliant
open()
, close()
and default constructor
are not available anymore
Dylib constructor changes
// old API
dylib lib("./libs/libfoo", dylib::extension);
// new API
dylib lib("./libs", "foo");
The dylib class can now load a dynamic library from the system library path
// Load "foo" library from the system library path
dylib lib("foo");
The dylib class will now automatically add os decorations (os prefix and suffix) to the library name, but you can disable that by setting decorations parameter to false
// Windows -> "foo.dll"
// MacOS -> "libfoo.dylib"
// Linux -> "libfoo.so"
dylib lib("foo");
// Windows -> "foo.lib"
// MacOS -> "foo.lib"
// Linux -> "foo.lib"
dylib lib("foo.lib", false);
Changes on get_function return type
The return type of get_function
is now a function pointer instead of an std::function
// old API
std::function<double(double, double)> adder = lib.get_function<double(double, double)>("adder");
// new API
double (*adder)(double, double) = lib.get_function<double(double, double)>("adder");
Changes on handle_error exception
handle_error
exception is now called load_error
try {
dylib lib("foo");
lib.get_function<double(double, double)>("adder");
}
// old API
catch (const dylib::handle_error &e) {
std::cout << e.what() << std::endl;
}
// new API
catch (const dylib::load_error &e) {
std::cout << e.what() << std::endl;
}
DYLIB_API is not available anymore
To ensure the functions and variable of your future dynamic library will be exported on windows, you can use the following macro
#if defined(_WIN32) || defined(_WIN64)
#define LIB_EXPORT __declspec(dllexport)
#else
#define LIB_EXPORT
#endif
Or, you can add the following cmake rule that will export all symbols on windows
if(MSVC)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
endif()
Make sure to mark the functions and variables you want to export as
extern "C"
to avoid name mangling
The cmake rule that disable lib prefixes is now useless
Since dylib
now handles libs prefix, you will need to remove the following cmake rule when building your dynamic libs
# remove the following rule from your cmakelists if you was using it with dylib 1.X.X
set_target_properties(target PROPERTIES PREFIX "")
Thanks
Huge thanks to @eyalroz for his help and contributions that made this update possible !
1.8.3
1.8.2
Changelog
- feat:
native_handle
function - feat:
fetchContent
example - fix: cleaner
std::string
overload forctor
andopen
- fix: cleaner documentation
1.8.1
Changelog
- fix: crash when
nullptr
is passed as argument inget_function
orget_variable
when no dynamic lib is currently loaded
1.8.0
Changelog
- feat:
has_symbol
function - feat:
operator bool()
- feat: Valgrind CI
Examples
has_symbol
void dylib_symbol_example(const dylib &lib)
{
if (lib.has_symbol("GetModule"))
std::cout << "GetModule has been found" << std::endl;
else
std::cout << "Could not found GetModule symbol" << std::endl;
}
operator bool()
void dylib_status_example(const dylib &lib)
{
if (lib)
std::cout << "something is curently loaded in the dylib object" << std::endl;
if (!lib)
std::cout << "nothing is curently loaded in the dylib object" << std::endl;
}
1.7.1
Changelog:
- Better error messages
- Better documentation
- Fixed
CMakeLists.txt
1.7.0
Changelog:
- Added cross-platform
DYLIB_API
macro to be able to export symbols - The library is now in
snake_case
- Better documentation
- Added
win32
check on CMakeLists instead of a basicelse
- License is now up-to-date
Reviewers:
- @MaximeHouis
- @Breigner01