Re: Shared library linking to Static library

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux