Что нужно: Программа A, которая загружает (через libdl) библиотеку B. Библиотека B использует функции и классы программы A.
Что есть: libtest.so: undefined symbol: _ZN4Test4testEv.
main.cpp:
#include <iostream>
#include <dlfcn.h>
#include "main.hpp"
int main() {
void *h = dlopen("libtest.so", RTLD_NOW);
if (h == nullptr){
std::cerr << dlerror() << std::endl;
return 1;
}
void *s = dlsym(h, "lib_main");
if (s == nullptr){
std::cerr << dlerror() << std::endl;
return 1;
}
((void(*)()) s)();
dlclose(h);
return 0;
}
void Test::test() {
std::cout << "Test::test()" << std::endl;
}
main.hpp:
class Test {
public:
void test();
};
lib.cpp:
#include "main.hpp"
void lib_main(){
Test test{};
test.test();
}
Компилирую:
g++ main.cpp -o main -ldl
g++ -shared lib.cpp -o libtest.so