今、私は3つの共有オブジェクト、A.so、B.so、C.soを持っています
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
結果が「COME HERE B」になりdlopen
、RTLD_DEEPBIND
フラグを使用できることを望み
ますが、プロジェクトで関数を暗黙的な呼び出しから明示的な呼び出しに変更するには時間がかかりすぎます。
とにかくこの問題を解決する方法はありますか?
gcc -Wl,-Bsymbolic
このソリューションでは機能しません。
まあ、Ac に共通の実装が含まれているとします。それは機能します。