Expanding on Konstantin Oznobihin's answer to the question, you can mark the c++ functions you are referencing with extern "C" in the declaration to prevent the compiler from mangling the names during compilation.
extern "C" void hello() {
std::cout << "Hello\n";
}
This will allow you to call your object/function by the name you initially gave it. In this case it is 'hello'.
void *handle = dlsym(0, RTLD_LOCAL | RTLD_LAZY);
FunctionType *fptr = (FunctionType *)dlsym(handle, "hello");
fptr();
There are a bunch of things extern "C" does under the hood, so here's a short list:
In C++ source, what is the effect of extern "C"?