{"id":21653569,"url":"https://github.com/karnkaul/dino","last_synced_at":"2025-04-11T21:00:54.669Z","repository":{"id":49159353,"uuid":"379478835","full_name":"karnkaul/dino","owner":"karnkaul","description":"C++20 Library for dynamically loading shared libraries and functions.","archived":false,"fork":false,"pushed_at":"2024-04-18T15:01:54.000Z","size":40,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T16:55:35.372Z","etag":null,"topics":["cpp","cpp20","cpp20-library","dynamic-loading","loader"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/karnkaul.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-23T04:31:12.000Z","updated_at":"2024-06-27T18:07:08.000Z","dependencies_parsed_at":"2022-08-27T08:12:01.731Z","dependency_job_id":null,"html_url":"https://github.com/karnkaul/dino","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"karnkaul/cpp-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karnkaul%2Fdino","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karnkaul%2Fdino/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karnkaul%2Fdino/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karnkaul%2Fdino/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/karnkaul","download_url":"https://codeload.github.com/karnkaul/dino/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248480434,"owners_count":21110936,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","cpp20","cpp20-library","dynamic-loading","loader"],"created_at":"2024-11-25T08:19:22.147Z","updated_at":"2025-04-11T21:00:54.447Z","avatar_url":"https://github.com/karnkaul.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dino\n\n**A simple, multi-platform dynamic loader written in C++20.**\n\n[![Build status](https://github.com/karnkaul/dino/actions/workflows/ci.yml/badge.svg)](https://github.com/karnkaul/dino/actions/workflows/ci.yml)\n\n## Requirements\n\n- C++20 compiler and standard library.\n- CMake 3.22+.\n\n## Usage\n\nLink to the `dino::dino` target in CMake.\n\n```cpp\n#include \u003cdino/library.hpp\u003e // include the header.\n\n// ...\nauto const path = dino::Location{\n  .identifier = \"lib-name\", // platform-agnostic identifier of library\n                            // (for libfoo.so/foo.dll the id is foo).\n  .directory = \"./\"         // directory to use; leave empty to\n                            // rely on the default search order.\n}.to_path();                // build a path using the default \n                            // Affix for this platform.\n\n// load the library.\nauto const library = dino::Library{path};\n// use dino::Library::make(path) to avoid exceptions on failure.\n\n// load a function reference.\n// the signature must match what's in the library source!\n// otherwise, calling the function invokes undefined behavior.\nauto const func = library.load\u003cint(char)\u003e(\"foobar\"); \n// use library.load_ptr() to get a function pointer instead.\n\nstd::cout \u003c\u003c func('x'); // call function and print returned int.\n```\n\n### CMake build options\n\n- `DINO_BUILD_TESTS`: Set `ON` to build tests (`OFF` by default unless `dino` is the project root)\n- `DINO_BACKEND`: Set to 'unix' or 'windows' to force a particular backend. Default value is 'default' which uses the host platform as detected by CMake.\n\n## FAQ\n\n### Are the loaded functions actually type-safe?\n\nUnfortunately not, both `dlsym()` and `GetProcAddress()` operate on symbol names only.\n\n### What happens if the names match but signatures don't?\n\nUndefined behaviour.\n\n## Contributing\n\nContributions are welcome.\n\n[Original repository](https://github.com/karnkaul/dino)\n\n[LICENCE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarnkaul%2Fdino","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkarnkaul%2Fdino","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarnkaul%2Fdino/lists"}