objeto compartilhado não pode encontrar símbolos no binário principal, C ++

Estou experimentando criar um tipo de arquitetura de plug-in para um programa que escrevi e, na minha primeira tentativa, estou tendo um problema. É possível acessar símbolos do executável principal de dentro do objeto compartilhado? Eu pensei que o seguinte seria bom:

testlib.cpp:

void foo();
void bar() __attribute__((constructor));
void bar(){ foo(); }

testexe.cpp:

#include <iostream>
#include <dlfcn.h>

using namespace std;

void foo()
{
    cout << "dynamic library loaded" << endl;    
}

int main()
{
    cout << "attempting to load" << endl;
    void* ret = dlopen("./testlib.so", RTLD_LAZY);
    if(ret == NULL)
        cout << "fail: " << dlerror() << endl;
    else
        cout << "success" << endl;
    return 0;
}

Compilado com:

g++ -fPIC -o testexe testexe.cpp -ldl
g++ --shared -fPIC -o testlib.so testlib.cpp

Resultado:

attempting to load
fail: ./testlib.so: undefined symbol: _Z3foov

Então, obviamente, não está bem. Então, acho que tenho duas perguntas: 1) Existe uma maneira de fazer com que o objeto compartilhado encontre símbolos no executável carregado? executar dentro de seus programas?

questionAnswers(1)

yourAnswerToTheQuestion