|| | |||Browse by category|
When I run my program based on DBTools.h++ shared libraries, I get a runtime error:
unresolved symbol: opinit.
Sometimes a core dump is also seen.
Opinit() is the OCI function for multithread applications programming. If multithread-safe Oracle Client libraries are used, then you should be able to find this function in both the archive library libclient.a on Solaris, for instance) and shared library (libclntsh.so on Solaris). This can verified using nm libclntsh.so | grep opinit. When this function exists in libclient but not in libclntsh, you get the relocation error: symbol not found.
Note: Static libraries don't have this problem.
This is a problem with the Oracle client libraries, and there is an easy fix for this problem.
Start by making a back-up copy genclntsh and the library libclntsh.so. Look at the file $ORACLE_HOME/bin/genclntsh and find the list of symbols, which should not contain opinit if you are having the unresolved symbol problem. Add opinit alphabetically to the list, then run the script genclntsh. This should recreate the library libclntsh.so with the symbol included.