Obter nomes de funções em uma biblioteca compartilhada programaticamente

Posso obter uma lista de todos os nomes de funções de uma biblioteca compartilhada (apenas Linux) programaticamente quando estou usandodl_open()?

Eu quero algo como isto:

std::vector<std::string> list_all_functions(void *dl) { 
   //... what can I do here?
}

int main() {
    void * dl = dl_open("./mylib.so", RTLD_NOW);
    auto functions = list_all_functions(dl);
    //...
    dl_close(dl);
    return 0;
}

Biblioteca de exemplos (mylib.so)

Cabeçalho (.h):

extern "C" {
    int sum (int a, int b);
}

Fonte (.c):

int sum (int a, int b) { return a + b; }

Hack sujo que eu conheço: usenm ouobjdump Utilitário

questionAnswers(1)

yourAnswerToTheQuestion