Mi sto attenendo all'utilizzo dei seguenti due file, che sono Mcrt1.o e Scrt1.o. Qualcuno può aiutarmi a farmi sapere per cosa sono quei due file. Come usarlo? Prendiamo ad esempio gcrt1.o, che è molto utile quando compili con l'opzione -pg per il test delle prestazioni. GrazieQual è l'utilizzo di Mcrt1.o e Scrt1.o?
5
A
risposta
7
I file del modulo *crt*.o
sono invariabilmente codice di avvio runtime C (la maggior parte del runtime C tende ad esistere nelle librerie, il codice di avvio è un file oggetto poiché è sempre necessario).
La descrizione dei vari tipi può essere trovata here, copiata di seguito per rendere la risposta autonoma. Prima alcune definizioni:
Mini FAQ about the misc libc/gcc crt files.
Some definitions:
PIC - position independent code (-fPIC)
PIE - position independent executable (-fPIE -pie)
crt - C runtime
Poi i vari file di avvio oggetto:
crt0.o
Older style of the initial runtime code ? Usually not generated anymore
with Linux toolchains, but often found in bare metal toolchains. Serves
same purpose as crt1.o (see below).
crt1.o
Newer style of the initial runtime code. Contains the _start symbol which
sets up the env with argc/argv/libc _init/libc _fini before jumping to the
libc main. glibc calls this file 'start.S'.
crti.o
Defines the function prolog; _init in the .init section and _fini in the
.fini section. glibc calls this 'initfini.c'.
crtn.o
Defines the function epilog. glibc calls this 'initfini.c'.
Scrt1.o
Used in place of crt1.o when generating PIEs.
gcrt1.o
Used in place of crt1.o when generating code with profiling information.
Compile with -pg. Produces output suitable for the gprof util.
Mcrt1.o
Like gcrt1.o, but is used with the prof utility. glibc installs this as
a dummy file as it's useless on linux systems.
e alcuni altri:
crtbegin.o
GCC uses this to find the start of the constructors.
crtbeginS.o
Used in place of crtbegin.o when generating shared objects/PIEs.
crtbeginT.o
Used in place of crtbegin.o when generating static executables.
crtend.o
GCC uses this to find the start of the destructors.
crtendS.o
Used in place of crtend.o when generating shared objects/PIEs.
Infine, l'ordine di collegamento comune:
General linking order:
crt1.o crti.o crtbegin.o [-L paths] [user objects] [gcc libs]
[C libs] [gcc libs] crtend.o crtn.o
I don Non so quale scenario useremo Scrt1.oi invece di crt1.o? – Daniel