色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

gcc的編譯選項總結(jié)

技術(shù)讓夢想更偉大 ? 來源:CSDN技術(shù)社區(qū) ? 作者: 冉冉云 ? 2022-11-02 09:37 ? 次閱讀

前言

本文用于記錄我在學習和工作中遇到的各種GCC選項,雖然這些選項可以在GNU的手冊上查到,不過這里做個總結(jié),可以避免每次都去查手冊,算是一個備忘吧。本文的內(nèi)容會不斷更新擴充。

1 常用的編譯選項

選項 作用
-o 指定輸出文件名稱
-E 只進行預處理
-S 只進行預處理、編譯
-c 只預處理、編譯、匯編,但不鏈接
-D 使用-D name[=definition]預定義名為name的宏,若不指定值則默認宏的內(nèi)容為1
-l(小寫的L) 使用-l libname或者-llibname,使鏈接器在鏈接時搜索名為libname.a/libname.so(靜態(tài)/動態(tài))的庫文件
-L 使用-Ldir添加搜索目錄,即鏈接器在搜索-l選項指定的庫文件時,除了系統(tǒng)的庫目錄還會(優(yōu)先)在-L指定的目錄下搜索
-I(大寫的i) 使用-I dir,將目錄dir添加為頭文件搜索目錄
-include 使用-include file,等效于在被編譯的源文件開頭添加#include "file"
-static 指定靜態(tài)鏈接(默認是動態(tài)鏈接)
-O0~3 開啟編譯器優(yōu)化,-O0為不優(yōu)化,-O3為最高級別的優(yōu)化
-Os 優(yōu)化生成代碼的尺寸,使能所有-O2的優(yōu)化選項,除了那些讓代碼體積變大的
-Og 優(yōu)化調(diào)試體驗,在保留調(diào)試信息的同時保持快速的編譯,對于生成可調(diào)試代碼,比-O0更合適,不會禁用調(diào)試信息。
-Wall 使編譯器輸出所有的警告信息
-march 指定目標平臺的體系結(jié)構(gòu),如-march=armv4t,常用于交叉編譯
-mtune 指定目標平臺的CPU以便GCC優(yōu)化,如-mtune=arm9tdmi,常用于交叉編譯

2 其他編譯選項

2.1 -x language

通常gcc通過源文件的后綴來判斷該源文件是由什么語言編寫的(雖然Linux中后綴沒有意義),換句話說,如果我們的文件名不帶后綴,那么gcc就無法判斷源文件的語言類型了,也就無法完成編譯。舉例來說:例1我用c語言編寫了一段代碼,將其保存在文件名為main.lll中,執(zhí)行g(shù)cc main.lll會報錯:

main.lll:filenotrecognized:Fileformatnotrecognized
collect2:error:ldreturned1exitstatus
12

例2在u-boot中,生成鏈接腳本的命令為arm-linux-gcc -E -Wp,-MD,./.u-boot.lds.d ...... -x assembler-with-cpp -std=c99 -P -o u-boot.lds arch/arm/cpu/u-boot.lds,如果把其中的-x assembler-with-cpp去掉,則編譯器給出如下信息(且不會生成鏈接腳本):

linkerinputfileunusedbecauselinkingnotdone
1

至此,-x language的作用就很好理解了,當我們的源文件不添加常規(guī)的后綴時,使用該選項來告訴gcc源文件使用了哪種編程語言,其中的language表明的就是語言類型,其可取的值有(不是全部):

c c-header cpp-output c++ c+±header c+±cpp-output objective-c objective-c-header objective-c-cpp-output objective-c++ objective-c+±header objective-c+±cpp-output assembler assembler-with-cpp

2.2 -fno-xxx

-fno-common遇到多個弱定義的全局符號時輸出一條警告信息。

-fno-ident忽略#ident命令。

-fno-builtin遇到與內(nèi)建函數(shù)同名的函數(shù)時不去鏈接內(nèi)建函數(shù),除非函數(shù)名以__builtin_開頭,也可以使用-fno-builtin-function來針對特定的函數(shù)。

2.3 -fxxx

-ffreestanding告訴編譯器要編譯的目標處于獨立的環(huán)境。在獨立的環(huán)境中,標準庫可能不存在,程序的入口也不一定是main。使用該選項的典型例子有bootloader、OS kernel等,這些程序不依賴標準庫,也不需要編譯器給它們添加.init段。

-fomit-frame-pointer在不需要幀指針的函數(shù)中省略掉幀指針。所謂幀指針,指的是指向一個函數(shù)的棧幀的底部的指針(棧頂指針是沒辦法省的)。比如x86平臺就使用ebp作為幀指針。省略掉幀指針的好處是可以多出一個可用的寄存器,壞處是不利于棧回溯值得注意的是,有些平臺的過程調(diào)用規(guī)范指定必須使用幀指針,此時該選項無效;同時,與該選項對應的-fno-omit-frame-pointer也不保證幀指針一定會被使用。

2.4 -Wxxx

-W/-Wextra-W是-Wextra的舊稱。顯然,-Wextra更具有可讀性,顧名思義,該選項可以使能一些額外的警告標志。所謂額外,是針對-Wall而言的,-Wall并沒有使能所有的警告,盡管它有個all。

-Wshadow使用該選項時,如果本地的變量或類型聲明遮蔽了另一個變量、參數(shù)、類型、類成員(C++)、實例變量(Objective-C)或內(nèi)建函數(shù),則gcc會報警告。

-Wconversion當使用該選項時,如果隱式類型轉(zhuǎn)換更改變量的值,則gcc會給出警告。這樣的隱式轉(zhuǎn)換有實數(shù)與整數(shù)的轉(zhuǎn)換、有符號數(shù)與無符號數(shù)的轉(zhuǎn)換、轉(zhuǎn)向更小類型的轉(zhuǎn)換等。當然,上述轉(zhuǎn)換中,如果最終沒有改變變量的值,那么就不會產(chǎn)生警告,如abs(2.0)。

2.5 -Wno-xxx

-Wno-sign-conversion關(guān)閉有符號數(shù)和無符號數(shù)之間進行類型轉(zhuǎn)換時產(chǎn)生的警告,即使用了該選項,那么有符號數(shù)和無符號數(shù)之間轉(zhuǎn)換時gcc就不報警告了。

2.6 給鏈接器使用的選項:-Wl,options

這里所說的鏈接器是指集成在可執(zhí)行文件gcc中的鏈接器,而不是單獨使用的ld。當我們通過gcc間接使用鏈接器時,需要在鏈接器的編譯選項前面加上-Wl,,然后跟著編譯選項,即標題中的options。GCC手冊中的相應介紹如下:8b2c8c66-59f8-11ed-a3b6-dac502259ad0.png
那么,為什么需要-Wl,前綴呢?GNU的鏈接器手冊中是這樣解釋的(很好懂,就不翻譯了):
8b4be160-59f8-11ed-a3b6-dac502259ad0.png

接下來就介紹一些用于鏈接器的選項:

-Wl,-rpath=dir在編譯鏈接時,鏈接器會在dir目錄下搜索動態(tài)庫。同時,把動態(tài)庫搜索路徑dir添加到可執(zhí)行文件中,以便可執(zhí)行文件加載運行時使用。要注意該選項與-L選項的區(qū)別,-L選項用于編譯鏈接時添加庫文件的搜索路徑;而該選項僅限于動態(tài)庫,并且既可以在編譯鏈接時添加搜索路徑,同時也能將搜索路徑添加到可執(zhí)行文件中。

3 ARM架構(gòu)專有的編譯選項

-mthumb使編譯器生成THUMB指令

-marm使編譯器生成ARM指令

-mthumb-interwork使編譯器生成支持ARM和Thumb指令集之間相互調(diào)用的代碼,默認是-mno-thumb-interwork

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • GCC
    GCC
    +關(guān)注

    關(guān)注

    0

    文章

    107

    瀏覽量

    24835
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1623

    瀏覽量

    49108

原文標題:參考文獻

文章出處:【微信號:技術(shù)讓夢想更偉大,微信公眾號:技術(shù)讓夢想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux 下GCC編譯

    一、Linux 下多文件編譯 在上一篇 Linux 下的 C 編程我們知道了 Linux 下的編譯器為 GCC ,以及如何使用 GCC 進行編譯
    的頭像 發(fā)表于 09-11 15:18 ?2621次閱讀
    Linux 下<b class='flag-5'>GCC</b>的<b class='flag-5'>編譯</b>

    gcc和Linux gcc 的常用選項

    gcc的使用方法gcc選項】文件名gcc常用選項gcc-v: 查看
    發(fā)表于 10-19 22:43

    淺談gcc編譯

    3.3 gcc編譯器 GNU CC(簡稱為gcc)是GNU項目中符合ANSI C標準的編譯系統(tǒng),能夠編譯用C、C++和Object C等語言
    發(fā)表于 10-18 13:48 ?0次下載

    常見gcc編譯警告整理以及解決方法

     GCC有很多的編譯選項,警告選項;指定頭文件、庫路徑;優(yōu)化選項。本文針整理一下GCC的警告
    發(fā)表于 11-14 11:19 ?2.1w次閱讀

    GCC編譯器你需要知道的入門知識

    編譯一個包含許多源文件的工程時,若只用一條GCC命令來完成編譯是非常浪費時間的。假設項目中有100個源文件需要編譯,并且每個源文件中都包含 10000行代碼,如果像上面那樣僅用一條
    的頭像 發(fā)表于 03-13 15:12 ?8786次閱讀

    嵌入式Linux工具之GCC常用編譯選項

    “-I dir”選項可以在頭文件的搜索路徑列表中添加 dir 目錄。由于 Linux 中頭文件都默認放到了“/usr/include/”目錄下,因此,當用戶希望添加放置在其他位置的頭文件時,就可以通過“-I dir”選項來指定,這樣,g
    的頭像 發(fā)表于 03-22 11:16 ?7711次閱讀
    嵌入式Linux工具之<b class='flag-5'>GCC</b>常用<b class='flag-5'>編譯</b><b class='flag-5'>選項</b>

    GCC編譯優(yōu)化指南

    這些信息,gcc將猜測哪個分支將被經(jīng)常運行以進行優(yōu)化。這類優(yōu)化信息將會存放在一個以源文件為名字的并以".da"為后綴的文件中。  全局選項:  -pipe  在編譯過程的不同階段之間使用管道而非臨時文件
    發(fā)表于 04-02 14:36 ?537次閱讀

    Linux系統(tǒng)下Gcc的基本用法和選項

    在使用Gcc編譯器的時候,我們必須給出一系列必要的調(diào)用參數(shù)和文件名稱。Gcc編譯器的調(diào)用參數(shù)大約有100多個,其中多數(shù)參數(shù)我們可能根本就用不到,這里只介紹其中最基本、最常用的參數(shù)
    發(fā)表于 08-20 09:57 ?1268次閱讀

    gcc的使用方法以及Linux gcc 的常用選項

    gcc的使用方法 gcc選項】文件名 gcc常用選項 gcc -v: 查看
    的頭像 發(fā)表于 10-22 14:42 ?3100次閱讀

    基于GCC實現(xiàn)支持MISRAC的安全編譯

    基于GCC實現(xiàn)支持MISRAC的安全編譯器(通信電源技術(shù)雜志簡介)-基于GCC實現(xiàn)支持MISRAC的安全編譯器? ? ? ? ? ? ? ? ? ??
    發(fā)表于 09-24 11:09 ?9次下載
    基于<b class='flag-5'>GCC</b>實現(xiàn)支持MISRAC的安全<b class='flag-5'>編譯</b>器

    STM32 GCC編譯環(huán)境搭建

    ://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa(1)、在/usr/local目錄下新建 complier 文件夾(存放編譯工具鏈)#cd /user/local#mkdir complier#chmo
    發(fā)表于 12-22 18:44 ?8次下載
    STM32 <b class='flag-5'>GCC</b><b class='flag-5'>編譯</b>環(huán)境搭建

    GCC編譯優(yōu)化系列】-specs=kernel.specs

    GCC編譯優(yōu)化系列】GCC編譯鏈接時候--specs=kernel.specs鏈接屬性究竟是個啥
    的頭像 發(fā)表于 07-11 09:25 ?3444次閱讀
    【<b class='flag-5'>GCC</b><b class='flag-5'>編譯</b>優(yōu)化系列】-specs=kernel.specs

    GCC編譯運行報錯】error while loading

    GCC編譯】運行編譯后的程序報錯 error while loading shared libraries: lib*.so: cannot open shared object file
    的頭像 發(fā)表于 08-26 13:14 ?7287次閱讀
    【<b class='flag-5'>GCC</b><b class='flag-5'>編譯</b>運行報錯】error while loading

    如何從GCC源碼學編譯原理

    本文結(jié)合編譯原理理論和GCC實踐做了一個總結(jié),希望能給需要了解編譯原理和底層知識的同學一個更快的學習路徑。
    的頭像 發(fā)表于 03-02 16:15 ?3124次閱讀
    如何從<b class='flag-5'>GCC</b>源碼學<b class='flag-5'>編譯</b>原理

    Keil MDK使用GCC編譯器的方法

    有網(wǎng)友問:Keil 編譯速度有點慢,它支持GCC編譯嗎?
    的頭像 發(fā)表于 03-24 09:57 ?3079次閱讀
    Keil MDK使用<b class='flag-5'>GCC</b><b class='flag-5'>編譯</b>器的方法
    主站蜘蛛池模板: 久久久久琪琪精品色| 欧美一区二区影院| 午夜不卡av免费| ai换脸女明星被躁在线观看免费| 国产成人综合高清在线观看 | 一区不卡二区卡| 古风一女N男到处做高H| 美女PK精子小游戏| 亚洲深夜在线| 国产精品久久自在自2021| 欧美亚洲高清国产| 1788福利视频在视频线| 韩国精品韩国专区久久| 十分钟免费视频大全在线观看| 99精品观看| 久久只有这里有精品4| 亚洲欧洲日产国产 最新| 国产精品免费观看视频播放| 欧美性猛交xxxxxxxx软件| 中文字幕国产视频| 精品国产乱码久久久久久软件 | 蜜桃狠狠色伊人亚洲综合网站| 亚洲精品免费在线| 国产精品美女久久久网站动漫| 人妻夜夜爽99麻豆AV| 99热精品一区| 蜜臀AV999无码精品国产| 一个人在线观看免费中文www| 国产专区亚洲欧美另类在线| 私人玩物在线观看| 东北女人奶大毛多水多| 青草国产超碰人人添人人碱| 99久久国产露脸精品麻豆| 毛片免费在线| 91区国产福利在线观看午夜| 久久这里只有精品1| 在线va无卡无码高清| 久久国产精品福利影集| 亚洲中文字幕乱倫在线| 狠狠色色综合站| 亚洲日本欧美产综合在线|