crtbegin.o,crtbeginT.o和crtbeginS.o有什么区别?

crtbegin.o,crtbeginT.o和crtbeginS.o有什么区别?,第1张

crtbegin.o,crtbeginT.o和crtbeginS.o有什么区别?

您会在这里找到很好的解释:http :
//dev.gentoo.org/~vapier/crt.txt

我将在下面引用它,以防URL消失


关于misc libc / gcc crt文件的迷你常见问题解答
Some definitions:PIC - position independent pre (-fPIC)PIE - position independent executable (-fPIE -pie)crt - C runtimecrt0.o crt1.o etc...  Some systems use crt0.o, while some use crt1.o (and a few even use crt2.o  or higher).  Most likely due to a transitionary phase that some targets  went through.  The specific number is otherwise entirely arbitrary -- look  at the internal gcc port pre to figure out what your target expects.  All  that matters is that whatever gcc has enpred, your C library better use  the same name.  This object is expected to contain the _start symbol which takes care of  bootstrapping the initial execution of the program.  What exactly that  entails is highly libc dependent and as such, the object is provided by  the C library and cannot be mixed with other ones.  On uClibc/glibc systems, this object initializes very early ABI requirements  (like the stack or frame pointer), setting up the argc/argv/env values, and  then passing pointers to the init/fini/main funcs to the internal libc main  which in turn does more general bootstrapping before finally calling the real  main function.  glibc ports call this file 'start.S' while uClibc ports call this crt0.S or  crt1.S (depending on what their gcc expects).crti.o  Defines the function prologs for the .init and .fini sections (with the _init  and _fini symbols respectively).  This way they can be called directly.  These  symbols also trigger the linker to generate DT_INIT/DT_FINI dynamic ELF tags.  These are to support the old style constructor/destructor system where all  .init/.fini sections get concatenated at link time.  Not to be confused with  newer prioritized constructor/destructor .init_array/.fini_array sections and  DT_INIT_ARRAY/DT_FINI_ARRAY ELF tags.  glibc ports used to call this 'initfini.c', but now use 'crti.S'.  uClibc  also uses 'crti.S'.crtn.o  Defines the function epilogs for the .init/.fini sections.  See crti.o.  glibc ports used to call this 'initfini.c', but now use 'crtn.S'.  uClibc  also uses 'crtn.S'.Scrt1.o  Used in place of crt1.o when generating PIEs.gcrt1.o  Used in place of crt1.o when generating pre 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.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.General linking order:crt1.o crti.o crtbegin.o [-L paths] [user objects] [gcc libs] [C libs] [gcc libs] crtend.o crtn.oMore references:    http://gcc.gnu.org/onlinedocs/gccint/Initialization.html


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5009829.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存