2013-05-08 10 views
5

私はMcrt1.oとScrt1.oという2つのファイルの使用方法を固執しています。誰も私にそれらの2つのファイルが何であるか教えてもらえますか?それの使い方?たとえば、gcrt1.oを取ってみましょう。これは、パフォーマンステストのために-pgオプションを指定してコンパイルするときに非常に便利です。ありがとうMcrt1.oとScrt1.oの使い方は何ですか?

答えて

7

形式のファイル*crt*.oは常にCランタイムスタートアップコードです(Cランタイムの大部分はライブラリに存在する傾向があります。スタートアップコードは常に必要なオブジェクトファイルです)。

さまざまなタイプの説明は、hereで解答を自己完結型にするために下にコピーされています。まず、いくつかの定義:

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 

その後、さまざまなスタートアップオブジェクトファイル:

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. 

そして、いくつか他の人:

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.o 
+0

IドンScrt1.oiをどのようなシナリオで使うのか知っていないcrt1.oのnstead? – Daniel