ld(1) cannot find entry symbol _start;
talon at lpthe.jussieu.fr
Tue Sep 28 11:52:52 UTC 2010
Paul B Mahol said:
On 9/28/10, Anton Shterenlikht <mexas at bristol.ac.uk> wrote:
> > I'm trying to learn the very basics of the
> > compile - assemble - link process on FreeBSD.
> > Please don't shoot me.
> > Then I try to link the object file into
> > an executable:
> > % ld tmp.o
> You are missing something in above command.
More precisely, if you run gcc -v on a C file you get someting like:
/usr/bin/ld --eh-frame-hdr -V -dynamic-linker /libexec/ld-elf.so.1
/usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/lib
-L/usr/lib /var/tmp//cco5EINk.o -lgcc --as-needed -lgcc_s --no-as-needed
-lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/crtend.o
where the object file produced by compilation and assembling is
That is adds several other object files to your own in order to get
In particular the start symbol, at which execution begins is in
as you can see from
niobe% nm /usr/lib/crt1.o
00000000 D __progname
00000000 T _start
00000020 t _start1
00000000 r abitag
00000004 C environ
which shows that _start is defined here, (but not e.g. _init). On the
other hand the function main() which is defined in your program is
referred to but undefined here.
More information about the freebsd-questions