Andrew Haley <aph@xxxxxxxxxx> writes: > Roopa V wrote: > >> I have an application which links to two libraries, a static library, >> “libstatic.a” and a dynamic library, “libdynamic.so”. The shared >> object “libdynamic.so” also internally links to “libstatic.a”. A >> global variable is defined in libstatic.a and is accessed in both test >> application and libdynamic.so. I'm exporting required symbols of >> libdynamic.so to the application using libdynamic.map file with >> --version-scripts linker option. libdynamic.map file is defined as: >> { >> global: >> operation_*; >> local: >> *; >> }; >> >> This creates two copies of libstatic in the memory. libdynamic shared >> object uses its own "private copy" of libstatic. > > That's very odd. Are you sure that everyone exports the global variable? > As long as they do, the dynamic linker should fix everything to point to > the same variable. Presumably the variables coming from libstatic are not named operation_*, and as such are treated as local within libdynamic. One approach to solve this problem is to simply not link libdynamic against libstatic, and to instead let libdynamic pull the symbols from the main executable. Another approach is to add the symbols from libstatic to your version script as global symbols. Ian