學習總結:gcc/g++ 編譯與連接

gcc/g++ 編譯與連接

編譯與連接的過程能夠分解爲四個步驟:預處理、編譯、彙編、連接

  • 預處理:源代碼文件和相關的頭文件,被預處理器cpp預處理成一個後綴爲 .i 的文件(選項:-E
  • 編譯:把預處理完的文件進行一系列的詞法分析、語法分析、語義分析以及優化後,產生相應的彙編代碼文件,後綴爲 .s,(選項 :-S
  • 彙編:把編譯階段生成的 .s 文件轉成二進制目標代碼,後綴爲.o,(選項:-c
  • 連接:把每一個源代碼模塊獨立地編譯,而後按照要將它們「組裝」起來。連接的主要內容就是把各個模塊之間相互引用的部分都處理好,使得各個模塊之間可以正常的銜接,生成最終可執行文件

例子:優化

pintA.hcode

#ifndef __PRINTA_H_
#define __PRINTA_H_

void printA();

#endif

printA.cpp開發

#include "printA.h"
#include <stdio.h>
void printA()
{
    printf("I am A.\n");
}

printB.hget

#ifndef __PRINTB_H_
#define __PRINTB_H_

void printB();

#endif

printB.cppio

#include "printB.h"
#include <stdio.h>
void printB()
{
    printf("You are B.\n");
}

語法:編譯

g++ 選項 source -o target
  • source 爲待處理文件,-o 後的 target 是目標文件,g++ 選項、source的文件後綴、 target的文件後綴要注意對應

預處理:class

g++ -E printA.cpp -o printA.i
g++ -E printB.cpp -o printB.i

編譯:後臺

g++ -S printA.i -o printA.s
g++ -S printB.i -o printB.s

彙編:gcc

g++ -c printA.s -o printA.o
g++ -c printB.s -o printB.o

連接:語法

g++ main.cpp printA.o printB.o -o main

運行

./main

輸出結果:

I am A.

You are B.

參考:《後臺開發核心技術與應用實踐》

相關文章
相關標籤/搜索