Bonjour J'ai un programme avec une fonction globale que j'aimerais personnaliser lors de l'exécution. Dis, il existe de nombreuses versions de la fonction foo() dispersées sur des bibliothèques partagées. Maintenant, en fonction de la configuration du système détectée au moment de l'exécution, je voudrais utiliser la fonction de la bibliothèque appropriée.Fonctions de substitution des bibliothèques dynamiques
fichier loader.cpp:
#include <dlfcn.h>
#include <iostream>
void __attribute__((weak)) foo();
int main(int argc, char *argv[])
{
void* dl = dlopen("./other.so", RTLD_NOW | RTLD_GLOBAL);
if (!dl)
{
std::cerr << dlerror() << std::endl;
return 1;
}
if (foo)
{
foo();
}
else
{
std::cerr << "No foo?" << std::endl;
}
dlclose(dl);
return 0;
}
fichier other.cpp:
#include <iostream>
void foo()
{
std::cout << "FOO!" << std::endl;
}
je compile le programme avec
g++ -Wall -fPIC -o loaded loader.cpp -ldl
g++ -Wall -fPIC -shared -o other.so other.cpp
Cependant le symbole faible n'est pas outrepassée. Des indices?