Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ctypes loading a c shared library that has dependencies

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.

like image 554
zoobert Avatar asked Feb 24 '10 15:02

zoobert


1 Answers

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.

like image 79
Geoff Reedy Avatar answered Sep 20 '22 20:09

Geoff Reedy