Jetzt habe ich drei gemeinsame Objekte, A.so, B.so, C.soWie RTLD_DEEPBIND verwenden, wenn implizit aufgerufen wird?
A.c
void libA()
{
common();
}
B.c
void common()
{
printf("COME HERE B\n");
}
C.c
void common()
{
printf("COME HERE C\n");
}
(just ingore the .h files)
test.c
int main()
{
libA();
return 1;
}
complie:
gcc -fPIC -shared libB.so libB.c
gcc -fPIC -shared libA.so libA.c ./libB.so
gcc -o test test.c libC.so libA.so
I Ergebnis sein wollen "HIER B KOMM", und ich dlopen
mit RTLD_DEEPBIND
Flagge,
aber es verwenden könnte kostet zu viel Zeit, um in meinem Projekt Funktionen vom impliziten Aufruf zum expliziten Aufruf zu ändern.
Gibt es trotzdem dieses Problem zu lösen?
gcc -Wl,-Bsymbolic
funktioniert nicht in dieser Lösung.
Nun, wenn A.c Implementierung von Common enthält. Es funktioniert.