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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

gcc的使用方法以及Linux gcc 的常用選項(xiàng)

嵌入式星球 ? 來(lái)源:嵌入式星球 ? 作者:嵌入式星球 ? 2020-10-22 14:42 ? 次閱讀

gcc的使用方法

gcc 【選項(xiàng)】文件名

gcc常用選項(xiàng)

gcc

-v: 查看gcc編譯器的版本,顯示gcc執(zhí)行時(shí)的詳細(xì)過(guò)程

-o please the output into

指定文件名為file,這個(gè)名稱不能和源文件名相同

-E preprocess only :do not compile ,assemble or link

只預(yù)處理 ,不會(huì)編譯,匯編,鏈接

-S compile only:do not assemble or link

只編譯,不會(huì)編譯,匯編,鏈接

//==============================================================

gcc -v :查看gcc編譯器的版本

方式一:

gcc hello.c 輸出一個(gè)./a.out,然后./a.out來(lái)執(zhí)行這個(gè)應(yīng)用程序。gcc -ohello hello.c輸出hello ,然后./hello 來(lái)執(zhí)行這個(gè)程序。

方式二:

gcc -E -ohello.ihello.c

gcc -S -ohello.shello.i

gcc -c -ohello.ohello.s

gcc -ohellohello.o

.o:objet file (OBJ文件)

小結(jié):1)輸入文件的后綴名和選項(xiàng)共同決定gcc到底執(zhí)行哪些操作;2)在編譯過(guò)程中,除非是使用了-E,-S,-c選項(xiàng)(或者編譯過(guò)程中出錯(cuò)阻止了編譯過(guò)程否則最后的步驟都是鏈接)。

方式三:

gcc-c-ohello.ohello.c

gcc -o hello hello

gcc 會(huì)對(duì).c文件默認(rèn)進(jìn)行預(yù)處理操作,-c再來(lái)指明編譯,匯編,從而得到了.o文件

再來(lái)通過(guò)gcc -o hello hello.o 將.o文件進(jìn)行鏈接,得到可執(zhí)行應(yīng)用程序

//======================================================

補(bǔ)充:

gcc -c -o hello.o hello.c

gcc -o hello hello.o

gcc會(huì)對(duì).c文件默認(rèn)進(jìn)行預(yù)處理操作,-c再來(lái)指明編譯,匯編從而得到.o文件。再通過(guò)gcc -o hello hello.o將.o文件進(jìn)行鏈接,從而得到可執(zhí)行文件。鏈接就是將匯編生成的OBJ文件,系統(tǒng)庫(kù)的OBJ文件,庫(kù)文件鏈接起來(lái)。最終生成可以在特定平臺(tái)的可執(zhí)行程序。

crtl.o ,crti.o ,crtbegin.o , crth.o是加入的系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件,對(duì)于一般的應(yīng)用程序,這些啟動(dòng)是必須的。

-lc :鏈接libc庫(kù)文件, 其中l(wèi)ibc庫(kù)文件中就實(shí)現(xiàn)了printf等函數(shù)

gcc -v -nostdlib -ohello hello.o會(huì)提示因?yàn)闆](méi)有鏈接系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件和標(biāo)準(zhǔn)庫(kù)文件,而鏈接失敗。這個(gè) -nostdlib選項(xiàng)常用于裸機(jī)的/boot loader,linux內(nèi)核等程序,因?yàn)樗麄儾恍枰獑?dòng)文件,標(biāo)準(zhǔn)庫(kù)文件。一般應(yīng)用程序才需要系統(tǒng)標(biāo)準(zhǔn)啟動(dòng)文件和標(biāo)準(zhǔn)庫(kù)文件 。裸機(jī)/boot loader,linux內(nèi)核等不需要啟動(dòng)文件,標(biāo)準(zhǔn)庫(kù)文件動(dòng)態(tài)鏈接使用動(dòng)態(tài)鏈接庫(kù)進(jìn)行鏈接,生成的程序執(zhí)行的時(shí)候需要加載所需的動(dòng)態(tài)庫(kù)才能運(yùn)行動(dòng)態(tài)鏈接生成的程序體積較小,但是必須依賴所需要的動(dòng)態(tài)庫(kù),否則無(wú)法執(zhí)行靜態(tài)鏈接使用靜態(tài)庫(kù)進(jìn)行鏈接,生成的程序包含程序運(yùn)行所需要的全部庫(kù),可以直接運(yùn)行,不過(guò)靜態(tài)鏈接生成的程序體積較大。

fqj

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

    關(guān)注

    87

    文章

    11208

    瀏覽量

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

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49015
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux驅(qū)動(dòng)程序的編譯方法有哪兩種

    Collection)或其他C/C++編譯器來(lái)編譯源代碼文件。這種方法較為原始,需要開(kāi)發(fā)者手動(dòng)指定編譯器選項(xiàng)、包含路徑、庫(kù)文件等。然而,在Linux驅(qū)動(dòng)開(kāi)發(fā)中,由于驅(qū)動(dòng)需要與內(nèi)核緊密集成,直接使用
    的頭像 發(fā)表于 08-30 14:39 ?468次閱讀

    嵌入式學(xué)習(xí)-常用編輯器之GCC編譯器

    很多編譯控制選項(xiàng),使得GCC可以根據(jù)不同的參數(shù)進(jìn)行不同的編譯處理,我們簡(jiǎn)單介紹一些常用的基本控制選項(xiàng)。 3、GCC的基本使用我們現(xiàn)在以我們學(xué)
    發(fā)表于 08-27 10:17

    常用編輯器之GCC編譯器

    :~$ sudo apt install gcc2、GCC的編譯選項(xiàng)GCC的基本用法是:gcc [選項(xiàng)
    發(fā)表于 08-24 11:05

    淺談錫膏的儲(chǔ)存及使用方法

    錫膏(焊錫膏)是電子組裝過(guò)程中常用的材料,它的儲(chǔ)存和使用方法對(duì)保證焊接質(zhì)量和性能至關(guān)重要。以下是詳細(xì)的儲(chǔ)存及使用方法
    的頭像 發(fā)表于 06-27 10:02 ?714次閱讀

    Aurix development studio是否支持GCC調(diào)試器?

    當(dāng)我嘗試使用 Aurix development studio 調(diào)試 Aurix 示例時(shí),我發(fā)現(xiàn)只有兩個(gè)選項(xiàng) TASKING C/C++ 調(diào)試器 winIDEA 調(diào)試器 我的問(wèn)題是,GCC 調(diào)試器是否支持? 如果支持,如何使用?
    發(fā)表于 05-20 06:57

    芯海應(yīng)用筆記:通用 MCU 基于 GCC 編譯開(kāi)發(fā)應(yīng)用

    本應(yīng)用筆記旨在幫助指導(dǎo)用戶針對(duì)芯海通用 MCU 基于 GCC 環(huán)境的快速開(kāi)發(fā)。芯??萍纪ㄓ?MCU 提供的 pack 開(kāi)發(fā)包都是僅支持芯海 CSU、MDK 或 IAR 通用集成的 IDE 工具,如果
    發(fā)表于 05-16 11:47

    請(qǐng)問(wèn)keil編寫(xiě)的BootLoader可以跳轉(zhuǎn)到GCC編寫(xiě)的APP里嗎?

    keil編寫(xiě)的BootLoader 可以跳轉(zhuǎn)到 GCC編寫(xiě)的APP里嗎?
    發(fā)表于 04-18 07:00

    嵌入式Linux C語(yǔ)言編程程序調(diào)試與宏定義

    Linux使用gcc編譯程序的時(shí)候,對(duì)于調(diào)試的語(yǔ)句還具有一些特殊的語(yǔ)法。gcc編譯的過(guò)程中,會(huì)生成一些宏,可以使用這些宏分別打印當(dāng)前源文件的信息,主要內(nèi)容是當(dāng)前的文件、當(dāng)前運(yùn)行的函數(shù)和當(dāng)前的程序行。
    發(fā)表于 03-01 11:41 ?855次閱讀

    AURIX? Development Studio使用HighTec的gcc,無(wú)法生成.map的原因?

    您好, 目前, AURIX? Development Studio 使用 HighTec 的 gcc,可以生成 .hex, 但無(wú)法生成 .map
    發(fā)表于 02-27 06:33

    為外部GCC配置ADS構(gòu)建項(xiàng)目時(shí)出錯(cuò)怎么解決?

    我已經(jīng)為外部GCC配置了ADS來(lái)構(gòu)建項(xiàng)目,我正在使用Gcc編譯器。 當(dāng)我使用此配置進(jìn)行構(gòu)建時(shí),它給出了錯(cuò)誤,我附加了錯(cuò)誤快照,我使用“-mtc18”檢查了配置及其默認(rèn)值,我們?nèi)绾?CAN 更改此配置。 此配置是為使用具有相同芯片組的同一主板而創(chuàng)建的,并且使用默認(rèn)配置。 還
    發(fā)表于 01-30 06:29

    KEIL uVision5包含TLx493庫(kù)后cmsis_gcc模塊中出現(xiàn)許多錯(cuò)誤是為什么?

    在 uVision5 KEIL (項(xiàng)目的其余部分在那里完成),并且在正確設(shè)置包含路徑后,我在cmsis_gcc中留下了多個(gè)錯(cuò)誤: C: /users/Alex/Appdata/local/arm/packs/arm
    發(fā)表于 01-19 06:59

    FTP常用命令的使用方法

    FTP常用命令的使用方法 FTP(File Transfer Protocol)是一種用于在網(wǎng)絡(luò)上進(jìn)行文件傳輸?shù)?b class='flag-5'>常用協(xié)議。通過(guò)FTP,用戶可以從一個(gè)主機(jī)上下載文件到本地,或?qū)⒈镜匚募蟼鞯竭h(yuǎn)程主機(jī)
    的頭像 發(fā)表于 12-15 11:28 ?1214次閱讀

    Linux常用命令自學(xué)手冊(cè)》+試讀報(bào)告

    之作。 個(gè)人收獲 《Linux常用命令自學(xué)手冊(cè)》是一本非常實(shí)用的書(shū)籍,它詳細(xì)介紹了Linux系統(tǒng)中的常用命令及其用法。通過(guò)閱讀這本書(shū),我不僅深入了解了
    發(fā)表于 12-14 16:59

    Linux用途和基本使用方法

    廣泛應(yīng)用的操作系統(tǒng)。本文將詳細(xì)介紹Linux的用途和基本使用方法。 首先,讓我們來(lái)了解一下Linux的用途。Linux具有廣泛的應(yīng)用領(lǐng)域,包括但不限于以下幾個(gè)方面: 個(gè)人電腦操作系統(tǒng):
    的頭像 發(fā)表于 11-23 11:13 ?1130次閱讀

    top命令如何進(jìn)入選項(xiàng)

    top命令是一個(gè)常用Linux系統(tǒng)性能監(jiān)控工具,可以實(shí)時(shí)地監(jiān)視系統(tǒng)的整體運(yùn)行情況。通過(guò)使用top命令,我們可以查看系統(tǒng)的負(fù)載情況、進(jìn)程的CPU和內(nèi)存使用情況等。想要進(jìn)入top命令的選項(xiàng),需要在終端
    的頭像 發(fā)表于 11-17 10:27 ?1332次閱讀