cpp-dlopen

cpp-dlopen.git
git clone git://git.lenczewski.org/cpp-dlopen.git
Log | Files | Refs

commit 54cf6720b39acaa1d9e6059330c67534c77cb2b7
Author: MikoĊ‚aj Lenczewski <mblenczewski@gmail.com>
Date:   Sun, 30 Nov 2025 14:36:51 +0000

Initial commit

Diffstat:
ACMakeLists.txt | 7+++++++
Amyexe.cpp | 34++++++++++++++++++++++++++++++++++
Amylib.cpp | 5+++++
Amylib.hpp | 2++
4 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.5) + +set(CMAKE_CXX_STANDARD 11) + +add_executable(myexe myexe.cpp) + +add_library(mylib SHARED mylib.cpp mylib.hpp) diff --git a/myexe.cpp b/myexe.cpp @@ -0,0 +1,34 @@ +#include <dlfcn.h> + +#include <stdio.h> + +int +main(int argc, char **argv) +{ + if (argc < 2) { + fprintf(stderr, "Usage: %s <path/to/lib.so>\n", argv[0]); + return 1; + } + + char *path = argv[1]; + + void *lib = dlopen(path, RTLD_NOW); + if (!lib) { + fprintf(stderr, "dlopen(libmylib.so): %s\n", dlerror()); + return 1; + } + + void *fn = dlsym(lib, "mylib_foo"); + if (!fn) { + fprintf(stderr, "dlsym(lib, mylib_foo): %s\n", dlerror()); + return 2; + } + + int res = ((int (*)(int, int)) fn)(1, 2); + if (res != 3) + return 3; + + dlclose(lib); + + return 0; +} diff --git a/mylib.cpp b/mylib.cpp @@ -0,0 +1,5 @@ +extern "C" int +mylib_foo(int a, int b) +{ + return a + b; +} diff --git a/mylib.hpp b/mylib.hpp @@ -0,0 +1,2 @@ +extern "C" int +mylib_foo(int a, int b);