This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Help with linking and symbol resolution


On 28/01/17 15:10, Lakshay Garg wrote:
>> I do this:
>>
>>  $ gcc f1.c f2.c -Wall
>> /usr/local/bin/ld: Warning: alignment 4 of symbol `c' in f2.o is smaller than 8 in f1.o
>> /usr/local/bin/ld: Warning: size of symbol `c' changed from 8 in f1.o to 4 in f2.o
>>
>> You should always use -Wall when gcc does anything unexpected.
> 
> Yes, I get this warning too. But what I want to understand is why do
> we get the size of c as 8 when it should be 4 because the linker will
> find that there are multiple declarations of c and will keep the
> strong one which is the declaration with int.
>
> Please see slides 22,23,24 from here:
> https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/11-linking.pdf

sizeof is evaluated by the compiler, not the linker.  At the time
f1.c is compiled, the compiler does not know about f2.c.

Note that your lecture notes are wrong about this being to do
with weak symbols.  The c which occurs in f1.o is in common; it
is not a weak declaration, as you'll see with readelf f1.o.

Andrew.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]