I work on Linux. When my application links to the shared library (which doesn't hide symbols) all symbols from that library are visible. A shared library can also be loaded at runtime using dlopen. Is it possible to control symbols visiblity using dlopen mode parameter or I always have to get desire symbol using dlsym ?
CodePudding user response:
Your question is exceedingly unclear.
If you dlopen the library, then about the only way to get to any of its symbols is via dlsym.
However, if you dlopen a library with RTLD_GLOBAL, then its symbols become available for subsequently loaded libraries without using dlsym.
For example, if libfoo.so defines symbol foo, and if you dlopen("libfoo.so", RTLD_GLOBAL|...); and later dlopen("libbar.so", ...) which uses foo, that would work -- libbar.so will be able to use foo from libfoo.so without doing any dlsym calls.
