国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】03 GCC編譯器的使用

這篇具有很好參考價(jià)值的文章主要介紹了【Linux】03 GCC編譯器的使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、編譯過(guò)程

?在使用gcc編譯程序時(shí),編譯過(guò)程可以簡(jiǎn)要?jiǎng)澐譃?個(gè)階段:

? ? ? ? 預(yù)處理、編譯、匯編、鏈接

1.1 預(yù)處理(preprocessing)

這個(gè)階段主要處理源文件中的#indef、#include和#define預(yù)處理命令;
這里主要是把一些include的頭文件和一些宏定義,放到源文件中。

編譯命令:gcc? -E? -o? hello.i? hello.c

【Linux】03 GCC編譯器的使用,linux

?1.2 編譯(compilation)

將經(jīng)過(guò)預(yù)處理文件(test.i)之后的程序轉(zhuǎn)換成特定匯編(test.s)代碼

?編譯命令:gcc? -S? -o? hello.s? hello.i

【Linux】03 GCC編譯器的使用,linux

1.3 匯編(assembly)

匯編過(guò)程將上一步的匯編代碼轉(zhuǎn)換成機(jī)器碼,這一步產(chǎn)生的文件叫做目標(biāo)文件,是二進(jìn)制格式

編譯命令:?gcc? -c? -o? hello.o? hello.s

【Linux】03 GCC編譯器的使用,linux

1.4 鏈接(linking)?

鏈接過(guò)程使用鏈接器將該目標(biāo)文件與其他目標(biāo)文件、庫(kù)文件、啟動(dòng)文件等鏈接起來(lái)生成可執(zhí)行文件。附加的目標(biāo)文件包括靜態(tài)連接庫(kù)和動(dòng)態(tài)連接庫(kù)。

編譯命令:gcc? -o? hello? hello.o?

【Linux】03 GCC編譯器的使用,linux

?二、 常用編譯選項(xiàng)

2.1?-c

????????預(yù)處理、編譯和匯編源文件,但是不作鏈接,編譯器根據(jù)源文件生成 OBJ 文件。缺省情況下, GCC 通過(guò)用`.o'替換源文件名的后綴`.c', `.i', `.s'等,產(chǎn)生 OBJ 文件名??梢允褂?o 選項(xiàng)選擇其他名字。 GCC 忽略-c 選項(xiàng)后面任何無(wú)法識(shí)別的輸入文件

2.2 -S

?????????編譯后即停止,不進(jìn)行匯編。對(duì)于每個(gè)輸入的非匯編語(yǔ)言文件,輸出結(jié)果是匯編語(yǔ)言文件。缺省情況下, GCC 通過(guò)用`.s'替換源文件名后綴`.c', `.i'等等,產(chǎn)生匯編文件名??梢允褂?o 選項(xiàng)選擇其他名字。 GCC 忽略任何不需要匯編的輸入文件

2.3 -E

????????預(yù)處理后即停止,不進(jìn)行編譯。預(yù)處理后的代碼送往標(biāo)準(zhǔn)輸出?

2.4 -o file

????????指定輸出文件為 file。無(wú)論是預(yù)處理、編譯、匯編還是鏈接,這個(gè)選項(xiàng)都可以使用。如果沒(méi)有使用`-o'選項(xiàng),默認(rèn)的輸出結(jié)果是:可執(zhí)行文件為`a.out';修改輸入文件的名稱是`source.suffix',則它的 OBJ 文件是`source.o',匯編文件是 `source.s',而預(yù)處理后的 C 源代碼送往標(biāo)準(zhǔn)輸出。?

2.5 -v?

顯示制作 GCC 工具自身時(shí)的配置命令;同時(shí)顯示編譯器驅(qū)動(dòng)程序、預(yù)處理器、編譯器的版本號(hào)

2.6?-Wall

打開(kāi)了所有需要注意的警告信息,比如沒(méi)有指定類(lèi)型的聲明、在聲明之前就使用的函數(shù)、局部變量除了聲明就沒(méi)再使用等?

2.7?-g

以操作系統(tǒng)的本地格式(stabs, COFF, XCOFF,或 DWARF)產(chǎn)生調(diào)試信息, GDB 能夠使用這些調(diào)試信息?

2.8?-O、-O1、-O2、-O3

優(yōu)化:對(duì)于大函數(shù),優(yōu)化編譯的過(guò)程將占用稍微多的時(shí)間和相當(dāng)大的內(nèi)存?

-O:不優(yōu)化

-O1:優(yōu)化一些

-O2:多優(yōu)化一些

-O3:優(yōu)化的更多

2.9?-llibrary

鏈接名為 library 的庫(kù)文件。鏈接器在標(biāo)準(zhǔn)搜索目錄中尋找這個(gè)庫(kù)文件,庫(kù)文件的真正名字是`liblibrary.a'?

2.10?-nostartfiles?

不鏈接系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件,而標(biāo)準(zhǔn)庫(kù)文件仍然正常使用?

2.11?-nostdlib

不鏈接系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件和標(biāo)準(zhǔn)庫(kù)文件,只把指定的文件傳遞給鏈接器?

2.12?-static?

在支持動(dòng)態(tài)鏈接(dynamic linking)的系統(tǒng)上,阻止鏈接共享庫(kù)?

2.13?-shared?

生成一個(gè)共享 OBJ 文件,它可以和其他 OBJ 文件鏈接產(chǎn)生可執(zhí)行文件?

2.14?-Idir?

在頭文件的搜索路徑列表中添加 dir 目錄?

2.15?-I?(?i?的大寫(xiě))

指定頭文件路徑(相對(duì)路徑或絕對(duì)路徑,建議相對(duì)路徑)?

2.16 -L?

指定連接的動(dòng)態(tài)庫(kù)或者靜態(tài)庫(kù)路徑(相對(duì)路徑或絕對(duì)路徑,建議相對(duì)路徑)?

2.17 -fPIC

用于生成位置無(wú)關(guān)的代碼(Position-Independent-Code),可以使得動(dòng)態(tài)庫(kù)可以被多個(gè)程序共享?

三、庫(kù)的制作與使用

3.1 制作、使用動(dòng)態(tài)庫(kù)

1.將源文件進(jìn)行匯編操作,需要使用參數(shù) -c, 還需要添加額外參數(shù) -fpic /-fPIC

gcc 源文件(*.c) -c -fPIC

2.?將得到的.o 文件打包成動(dòng)態(tài)庫(kù),還是使用 gcc, 使用參數(shù) -shared 指定生成動(dòng)態(tài)庫(kù)??

gcc -shared 與位置無(wú)關(guān)的目標(biāo)文件(*.o) -o 動(dòng)態(tài)庫(kù)(libxxx.so)?

3.? 編譯APP

gcc -o test main.o?-lsub?-L /libsub.so/所在目錄/

?4. 使用APP

  • 先把 libsub.so 放到 Ubuntu 的/lib 目錄,然后就可以運(yùn)行 test 程序
  • 如果不想把 libsub.so 放到/lib,也可以放在某個(gè)目錄比如/a,然后執(zhí)行 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a

?export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./

./test文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-809723.html

3.2?制作、使用靜態(tài)庫(kù)

1.將源文件進(jìn)行匯編操作,需要使用參數(shù) -c, 還需要添加額外參數(shù) -fpic /-fPIC

gcc 源文件(*.c) -c -fPIC

2.??將得到的.o 文件打包成動(dòng)態(tài)庫(kù),使用 ar指令生成靜態(tài)庫(kù)

ar? crs? 靜態(tài)庫(kù)(libxxx.so)?? 與位置無(wú)關(guān)的目標(biāo)文件(*.o)

3.??編譯APP

gcc -o test main.o?-lsub?-L /libsub.a/所在目錄/

?4. 使用APP

./test

到了這里,關(guān)于【Linux】03 GCC編譯器的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux】Linux編譯器 gcc/g++的使用&&初識(shí)動(dòng)靜態(tài)鏈接庫(kù)

    【Linux】Linux編譯器 gcc/g++的使用&&初識(shí)動(dòng)靜態(tài)鏈接庫(kù)

    ? ???個(gè)人主頁(yè):@Sherry的成長(zhǎng)之路 ??學(xué)習(xí)社區(qū):Sherry的成長(zhǎng)之路(個(gè)人社區(qū)) ??專欄鏈接:Linux ?? 長(zhǎng)路漫漫浩浩,萬(wàn)事皆有期待 上一篇博客:【Linux】Linux環(huán)境基礎(chǔ)工具的基本使用及配置(yum、vim) 在上一篇 Linux 博客中,我們講解了 vim 編輯器的使用,可以在 Linux 上寫(xiě)

    2024年02月11日
    瀏覽(33)
  • 【Linux】Linux編譯器 gcc 的使用 | 動(dòng)靜態(tài)庫(kù)的初步認(rèn)識(shí)

    【Linux】Linux編譯器 gcc 的使用 | 動(dòng)靜態(tài)庫(kù)的初步認(rèn)識(shí)

    ??作者主頁(yè):@安 度 因 ??學(xué)習(xí)社區(qū):StackFrame ??專欄鏈接:Linux

    2024年01月15日
    瀏覽(23)
  • 【Linux】編譯器-gcc/g++與調(diào)試器-gdb的使用

    【Linux】編譯器-gcc/g++與調(diào)試器-gdb的使用

    ?? 樊梓慕: 個(gè)人主頁(yè) ??? 個(gè)人專欄: 《C語(yǔ)言》《數(shù)據(jù)結(jié)構(gòu)》《藍(lán)橋杯試題》《LeetCode刷題筆記》《實(shí)訓(xùn)項(xiàng)目》《C++》《Linux》 ?? 每一個(gè)不曾起舞的日子,都是對(duì)生命的辜負(fù) 目錄 前言 1.gcc/g++語(yǔ)法 2.gcc的使用及編譯器是如何\\\"翻譯\\\"代碼的? (1)預(yù)處理 (2)編譯 (3)匯編

    2024年02月04日
    瀏覽(19)
  • 【Linux】編譯器gcc和g++與調(diào)試器gdb的使用

    【Linux】編譯器gcc和g++與調(diào)試器gdb的使用

    我們知道,一個(gè)程序被運(yùn)行起來(lái)之后需要經(jīng)歷四個(gè)階段然后才變成一個(gè)可執(zhí)行的程序,他們分別為:預(yù)處理,編譯,匯編和鏈接。下面我們將介紹這四個(gè)階段的操作,測(cè)試代碼如下: 1.1 預(yù)處理 預(yù)處理也叫預(yù)編譯,程序在預(yù)處理階段會(huì)完成如下操作: 展開(kāi)頭文件,將頭文件中

    2024年02月07日
    瀏覽(29)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.4(編譯器 gcc/g++ 使用)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.4(編譯器 gcc/g++ 使用)

    前面我們講了C語(yǔ)言的基礎(chǔ)知識(shí),也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識(shí),也學(xué)習(xí)了一些Linux的基本操作,也了解并學(xué)習(xí)了有關(guān)Linux開(kāi)發(fā)工具vim ,也相信大家都掌握的不錯(cuò),今天博主帶大家了解一下Linux編譯器 gcc/g++ 使用, 下面話不多說(shuō)坐穩(wěn)扶好咱們要開(kāi)車(chē)了!!

    2024年02月12日
    瀏覽(16)
  • Linux:編譯器 - gcc

    Linux:編譯器 - gcc

    GCC(英文全拼:GNU Compiler Collection)是 GNU 工具鏈的主要組成部分,是一套以 GPL 和 LGPL 許可證發(fā)布的程序語(yǔ)言編譯器自由軟件,由 Richard Stallman 于 1985 年開(kāi)始開(kāi)發(fā)。 gcc是GCC中的C語(yǔ)言編譯器,而g++是GCC中的C++編譯器。本博客只講解gcc,g++的語(yǔ)法和選項(xiàng)和gcc都是一致的。 gcc 編譯

    2024年04月14日
    瀏覽(22)
  • Linux GCC常用命令以及GCC編譯器

    GCC 是編譯工具,它的意思是 GNU C Compiler 。經(jīng)過(guò)了這么多年的發(fā)展,GCC 已經(jīng)不僅僅能支持 C 語(yǔ)言;它現(xiàn)在還支持 Ada 語(yǔ)言、C++ 語(yǔ)言、Java 語(yǔ)言、Objective C 語(yǔ)言、Pascal 語(yǔ)言、COBOL語(yǔ)言,以及支持函數(shù)式編程和邏輯編程的 Mercury 語(yǔ)言等等。而 GCC 也不再單只是 GNU C 語(yǔ)言編譯器的意

    2024年02月05日
    瀏覽(32)
  • Linux編譯器gcc/g++

    Linux編譯器gcc/g++

    以gcc編譯 以g++編譯,但是此時(shí)會(huì)發(fā)現(xiàn)沒(méi)有g(shù)++這個(gè)指令,所有需要安裝它,安裝指令 yum install gcc gcc-c++ gcc和g++都會(huì)形成可執(zhí)行文件a.out gcc只能編譯c語(yǔ)言代碼,g++能編譯c/c++ 以c程序?yàn)槔?,?lái)看看它從一個(gè)文本類(lèi)的c程序編譯成計(jì)算機(jī)可以認(rèn)識(shí)的二進(jìn)制程序它需要經(jīng)過(guò)四個(gè)階段 預(yù)

    2024年02月10日
    瀏覽(26)
  • Linux——gcc/g++編譯器

    Linux——gcc/g++編譯器

    目錄 I.Linux編譯器 1.gcc/g++編譯器 在C代碼生成可執(zhí)行程序的過(guò)程中,會(huì)有四個(gè)過(guò)程: 1預(yù)處理,2編譯,3匯編,4鏈接 Linux對(duì).c文件分辨進(jìn)行預(yù)處理,編譯,匯編三大步指令: 預(yù)處理指令: 編譯指令: 匯編指令: 接下來(lái)說(shuō)一說(shuō)鏈接過(guò)程: II.動(dòng)靜態(tài)鏈接? 一.動(dòng)態(tài)鏈接 二.靜態(tài)鏈接

    2024年02月04日
    瀏覽(59)
  • 《Linux從練氣到飛升》No.05 Linux編譯器gcc/g++的使用及編譯過(guò)程 【云邊有個(gè)小賣(mài)部】上新

    《Linux從練氣到飛升》No.05 Linux編譯器gcc/g++的使用及編譯過(guò)程 【云邊有個(gè)小賣(mài)部】上新

    ??作者: 主頁(yè) 我的專欄 C語(yǔ)言從0到1 探秘C++ 數(shù)據(jù)結(jié)構(gòu)從0到1 探秘Linux 菜鳥(niǎo)刷題集 ??歡迎關(guān)注:??點(diǎn)贊??收藏??留言 ?? 碼字不易,你的??點(diǎn)贊??收藏??關(guān)注對(duì)我真的很重要,有問(wèn)題可在評(píng)論區(qū)提出,感謝閱讀?。?! 本篇我們將講述gcc/g++的使用以及它是如何完成一

    2024年02月14日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包