On Tue, 28 Sep 2010, Michel Talon wrote:
Paul B Mahol said:
On 9/28/10, Anton Shterenlikht <me...@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
/usr/lib/crtn.o
where the object file produced by compilation and assembling is
/var/tmp//cco5EINk.o
That is adds several other object files to your own in order to get
an executable.
In particular the start symbol, at which execution begins is in
/usr/lib/crt1.o
as you can see from
niobe% nm /usr/lib/crt1.o
w _DYNAMIC
00000000 D __progname
U _fini
U _init
U _init_tls
00000000 T _start
00000020 t _start1
00000000 r abitag
U atexit
00000004 C environ
U exit
U main
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.
thank you. Where can I read more on what each file is for:
% ls -al /usr/lib/crt*
-r--r--r-- 1 root wheel 2552 Sep 15 13:52 /usr/lib/crt1.o
-r--r--r-- 1 root wheel 4656 Sep 15 13:53 /usr/lib/crtbegin.o
-r--r--r-- 1 root wheel 4936 Sep 15 13:53 /usr/lib/crtbeginS.o
-r--r--r-- 1 root wheel 4656 Sep 15 13:53 /usr/lib/crtbeginT.o
-r--r--r-- 1 root wheel 3648 Sep 15 13:53 /usr/lib/crtend.o
-r--r--r-- 1 root wheel 3648 Sep 15 13:53 /usr/lib/crtendS.o
-r--r--r-- 1 root wheel 1928 Sep 15 13:52 /usr/lib/crti.o
-r--r--r-- 1 root wheel 1087 Sep 15 13:52 /usr/lib/crtn.o
The sources for these files are in asm, so would be good
to read a more accessible introduction.
Also, it seems only crt1, crti and crtn are provided
by FreeBSD itself (/usr/src/lib/csu/ia64), crtbegin and
crtend are under /usr/src/contrib/gcc/config/ia64/,
and sources for *S.o and *T.o I can't find at all.
So which of these are specific to GCC on FreeBSD, and
which aren't?
For example if I use g95 compiler instead of gfortran45,
will the linker still need all above object files?
many thanks
anton
_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"