avr-gcc-list
[Top][All Lists]
Advanced

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

Re: [avr-gcc-list] Link Eorror in Combining C and assembly source files


From: Dean Ferreyra
Subject: Re: [avr-gcc-list] Link Eorror in Combining C and assembly source files
Date: Fri, 05 Sep 2008 01:25:34 -0700
User-agent: Thunderbird 2.0.0.16 (Windows/20080708)

Shilin Yu wrote:
> I have made a stupid mistake:(
> I defined sched_mode like this: 
>          volatile static unsigned char sched_mode;
> OMG, this mistake cost me a whole day!!! 
> however, it was found at the end.
> 
> Thanks, Dean!

No problem.  Ah, static.  I'm glad you found it!

Dean

> 2008/9/5 Dean Ferreyra <address@hidden <mailto:address@hidden>>
> 
>     Shilin Yu wrote:
>     > I have tried by it doesn't work either.
> 
>     Yes, I was wrong about the underscore, sorry.
> 
>     > I seems like that WinAVR uses the GNU Assembler(GAS), not the AVR
>     Assembler
> 
>     Sorry, I don't know what you mean.
> 
>     Can you share the actual command lines you're using to compile and
>     assemble the files?  My new guess is that when you are assembling the
>     file, avr-gcc is also trying to link.
> 
>     One quick test I tried was to make two files, a.c:
> 
>        volatile unsigned char sched_mode;
> 
>        int main(void)
>        {
>            return 0;
>        }
> 
>     and b.S:
> 
>        .extern sched_mode
>                LDS R18, sched_mode
> 
>     and then I compiled them separately and then linked them like so:
> 
>        $ avr-gcc -mmcu=atmega128 -c a.c
> 
>        $ avr-gcc -mmcu=atmega128 -c b.S
> 
>        $ avr-gcc -mmcu=atmega128 -o a.out a.o b.o
> 
>        $ ls -l a.out
>        -rwxr-xr-x 1 dean None 2674 Sep  5 00:59 a.out*
> 
>     Can you try something along those lines?
> 
>     On the other hand, without the -c, the second command will generate an
>     error, something like:
> 
>        $ avr-gcc -mmcu=atmega128 b.S
>        .../crtm128.o:(.init9+0x0): undefined reference to `main'
>        .../ccJeooXf.o:(.text+0x2): undefined reference to `sched_mode'
> 
>     Dean
> 
>     >
>     > 2008/9/5 Dean Ferreyra <address@hidden
>     <mailto:address@hidden> <mailto:address@hidden
>     <mailto:address@hidden>>>
>     >
>     >     Try using _sched_mode in your assembly code instead.  If I
>     remember
>     >     correctly, the C compiler automatically prefixes symbols with an
>     >     underscore.
>     >
>     >     Dean
>     >
>     >     Shilin Yu wrote:
>     >     >    I met an link error when build a project with .c and .S files
>     >     >
>     >     >    the c file  like this:
>     >     >          ...
>     >     >          volatile unsigned char     sched_mode;
>     >     >          ...
>     >     >
>     >     >
>     >     >    the assembly  file like this:
>     >     >          .extern    sched_mode
>     >     >          ...
>     >     >          LDS R18, sched_mode
>     >     >          ...
>     >     >
>     >     >
>     >     >    when I build the project. the link error about the assembly
>     >     file output:
>     >     >
>     >     >     (.text+0x32): undefined reference to `sched_mode'
>     >     >
>     >     >
>     >     >     Any reply is welcome! Thanks!
>     >     >
>     >     > --
>     >     > Sincerely yours,
>     >     > Shilin Yu
>     >     >
>     >
>     >
>     >
>     >
>     > --
>     > Sincerely yours,
>     > Shilin Yu
> 
> 
> 
> 
> -- 
> Sincerely yours,
> Shilin Yu





reply via email to

[Prev in Thread] Current Thread [Next in Thread]