On Linux, I have a c shared library that depends on other libs. LD_LIBRARY_PATH is properly set to allow the linker to load all the libraries. When I do:
libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path)
I get the following error:
Traceback (most recent call last): File "libwfm_test.py", line 12, in <module> libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) File "/usr/lib/python2.5/ctypes/__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "/usr/lib/python2.5/ctypes/__init__.py", line 348, in __init__ self._handle = _dlopen(self._name, mode) OSError: path-to-my-lib/libwav.so: undefined symbol: ODBCGeneralQuery
It seems that LD_LIBRARY_PATH has no effect here. Is there a way to have these dependency library "loadable" ?
Thanks in advance for the help.
It would seem that libwav.so does not declare it's dependency on the library defining ODBCGeneralQuery. Try running ldd path-to-my-lib/libwav.so
and see if there's something missing. If this is a shared library that you are building you should add -llibname
to the linking command (the one that is something like gcc -shared -o libwav.so a.o b.o c.o
) for each library that the library's code uses. Any other libraries referenced by the original shared library in this way should automatically be loaded as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With