अब मैं 3 साझा वस्तुओं, A.so, B.so, C.soपूर्ण रूप से आमंत्रित करते समय RTLD_DEEPBIND का उपयोग कैसे करें?
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
मैं परिणाम चाहते हैं "यहाँ आए बी" और मैं RTLD_DEEPBIND
ध्वज के साथ dlopen
इस्तेमाल कर सकते हैं हो सकता है,
लेकिन यह है मेरे प्रोजेक्ट में स्पष्ट कॉल से निहित कॉल से कार्यों को बदलने के लिए बहुत अधिक समय लगता है।
क्या इस समस्या को हल करने के लिए वैसे भी है?
gcc -Wl,-Bsymbolic
इस समाधान में काम नहीं करता है।
ठीक है, अगर एसी में सामान्य के कार्यान्वयन शामिल हैं। यह वास्तव में कारगर है।