How can my .so find its dependent .so in different Ubuntu version?
I have one libA.so. It is used by JNI method.
And I have two different version of Ubuntu. One is Ubuntu 8.04 and the other is Ubuntu 9.10.
libA.so has a dependency. libA.so depends on libB.so and libB.so depends on libC.so.
ie. libA.so -> libB.so -> libC.so (Actually libB.so and libC.so are related with GTK)
The libA.so is compiled in Ubuntu 8.04. And JNI method works fine in Ubuntu 9.10. (very strange)
But It does not work sometimes in Ubuntu 8.04. It returns "undefined symbol GTK_SET_BULA" error.
So I checked it using readelf -a libC.so
and I could find the symbol.
I checked it using ldd libA.so
and ldd libB.so
. 开发者_运维百科The link information is fine also.
I have any idea about this problem. Please let me know your excellent opinion. Thanks.
Provide more information on your question:
- exact name of the undefined symbol
- exact name of libraries A, B, C,
- exact name of JNI method you are calling,
- a few words about the application running.
The common recommendation for solving such problems is to search information about missed symbol in the LSB Navigator.
BTW
Use -Wa option to read ELF files instead of -a to avoid breaking of output lines (into 80 columns):
readelf -Wa libC.so
精彩评论