gcc linker help

Brian Dessent brian@dessent.net
Tue Nov 15 21:09:00 GMT 2005


Kanak Nath wrote:

> I've created a small .c code and it has calls to strlen() and printf(). I compiled it with arm-elf-gcc  -mcpu=arm9  -c \example\test.c to generate test.o. Now I wanted to link it with arm-elf-ld test.o c:\gnude\lib\gcc-lib\arm-elf\3.3.1\libgcc.a. I get the following error:
> 
> : undefined reference to `strlen'
> test.o(.text+0x50): In function `main':
> : undefined reference to `printf'

Functions like strlen and printf come from the C library (such as glibc,
newlib, uclibc, etc.)  Libgcc is something completely different, and it
only provides a small number of support routines that are used
internally by the compiler, not functions that you'd call in normal
code.  You need to link against whatever C library your toolchain uses.

Most of the time, it is a bad idea to link by calling ld directly.  The
gcc front-end program itself is designed to do this, so you should
always link with "gcc -o filename object1.o object2.o" unless you know
exactly what you're doing.  The front-end will add all the necessary
auxillery object files, library files, and linker switches which are
necessary - there can be a lot of these.

Finally, you appear to be using some specific toolchain from some vendor
(whatever "gnude" is), and so if you can't get it working you really
need to contact them.  The gcc project does not have anything to do with
these specific toolchain bundles, only the "vanilla" gcc - and even if
it did you'd have a hard time trying to get help with an ancient version
like 3.3.1.

Brian



More information about the Gcc-help mailing list