I\'m trying to dynamically load a camera library .so file into a Linux executable to gain access to simple camera functions.
I\'m attempting to do this by:
Most likely, libCamera.so
uses a symbol defined in a shared library without depending on that library.
Find a culprit. Take a real executable which links against libCamera.so
(and it works). List its dependencies with ldd /path/to/executable
. Among them should be a library which has a definition for ZTVN10_cxxabiv117__class_type_infoE
(use grep
to select likely candidates, nm -D
on a library to be sure). That library won't be in the list shown by ldd ./libCamera.so
.
Solve a problem. Load the library found in step 1 by dlopen
first (use RTLD_GLOBAL
there as well).
If there is a problem with another symbol, goto step 1.
If newly-added libraries have the same problem too, goto step 1.
Tell library authors to please fix their linking.
It could also happen that one of the prerequisites in ldd ./libCamera.so
got upgraded and lost a symbol definition (maybe it was recompiled with a compiler which does name mangling differently). Then you won't find the culprit in step 1, and there is no solution but downgrading something again.