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 January 2017 at 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.
>>
>
> Hi Andrew
>
> 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.

You lied to the compiler, so you have no right to expect any sane
behaviour. You told the compiler that the object 'c' has type int, but
then in the complete program it has type double instead. Don't lie to
the compiler.

If you lie and say it has type int, then when you ask for its size you
get an answer based on a lie.

> Please see slides 22,23,24 from here:
> https://www.cs.cmu.edu/afs/cs/academic/class/15213-f10/www/lectures/11-linking.pdf

Those slides seem highly misleading to me, and what they describe as
"Evil!" and "Nasty!" are not valid C, and make your whole program
undefined. Do not do that.


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