Hello.

On 08/16/2018 03:29 PM, Michael Matz wrote:
> Hi,
> 
> On Thu, 16 Aug 2018, Martin Liška wrote:
> 
>> SHLIB_SOVERSION = 1
>> SHLIB_SONAME = @shlib_base_name@.so.$(SHLIB_SOVERSION)
>>
>> which would require a substitution for soversion, show I generalize even 
>> so much?
> 
> I wouldn't bother.  libgcov.so.1 sounds just fine, and due to symbol 
> versioning we never need to change the SO version anymore (like with 
> libgcc_s).

Good.

> 
>> About the location of libgcov.{a,so}, I believe right place would be now:
>>
>> /home/marxin/bin/gcc/lib64/libgcov.so.1
>> /home/marxin/bin/gcc/lib64/libgcov.so
>> /home/marxin/bin/gcc/lib64/libgcov.a
> 
> No.  With version dependend dirs the .so symlink and the .a file have to 
> be placed into the version dependend dirs.  Look at where libgcc_s.so and 
> libgcc.a are placed on your system.
> 
>> Because of LD_LIBRARY_PATH location I believe libgcov.so should not be in:
>> /home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/9.0.0/libgcov.so
> 
> LD_LIBRARY_PATH doesn't affect the .so symlink (which is used for link 
> editing), but where the full SONAME library (i.e. libgcov.so.1) is found.  
> _That_ one should indeed be placed into a normal system directory like 
> /usr/lib, again look at the distribution of files from your system.

Ok, so proper layout would be:

/home/marxin/bin/gcc/lib64/libgcov.so.1
/home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/9.0.0/libgcov.so
/home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/9.0.0/libgcov.a

Where /home/marxin/bin/gcc/lib64/gcc/x86_64-pc-linux-gnu/9.0.0/libgcov.so 
points to
/home/marxin/bin/gcc/lib64/libgcov.so.1 ?


> 
>> One another question has popped up:
>>
>> libgcov.a archive consists of many one-function-per-object-file objects,
>> this is guarded with e.g. #ifdef L_gcov_reset macro. For shared library I 
>> need
>> something like:
>> +#if defined(L_gcov_reset) || defined(L_gcov_shared)
>>
>> question is whether it worth separating the functions into separate objects? 
>> I know
>> during linking linker can strip the unused ones. But still.
> 
> No, that wouldn't make sense because the shared library needs to contain 
> all the functions that are potentially callable (i.e. all of them).  There 
> are no unused ones.

Yes, but we build objects for libgcov.a separately, each object with one 
L_gcov_* macro defined.
So still it works in case of the static library.

Martin

> 
> 
> Ciao,
> Michael.
> 

Reply via email to