I am having a problem about a wrong symbol resolution. My main program loads a shared library with dlopen and a symbol from it with dlsym. Both the program and the library a
It seems this issue can take place in one more case (like for me). I have a program and a couple of a dynamically linked libs. And when I tried to add one more I used a function from a static lib (my too) in it. And I forgot to add to linkage list this static lib. Linker was not warn me about this, but program was crushing with segmentation fault error.
Maybe this will help for someone.
FWIW, I ran into a similar problem when compiling as C++ and forgetting about name mangling. A solution there is to use extern "C"
.
I suspect that there is a clash between two global symbols. One solution is to declare a
in the main program as static. Alternatively, the linux manpage mentions RTLD_DEEPBIND
flag, a linux-only extension, which you can pass to dlopen
and which will cause library to prefer its own symbols over global symbols.