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

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

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

嵌入式操作系統(tǒng)都基于GCC進(jìn)行源碼編譯

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:李倩 ? 2018-03-30 13:57 ? 次閱讀

1.GCC相關(guān)介紹

GCC與gcc有什么不同?

● GCC(GNU Compiler Collection)

GNU編譯器集合,包含眾多語言的編譯器:C、C++、Java、D、Objective-C、etc

●gcc:特指GCC中的C語言編譯器

GCC VS 嵌入式

●多數(shù)嵌入式操作系統(tǒng)都基于GCC進(jìn)行源碼編譯

Linux、VxWorks、Android、etc

●實(shí)際開發(fā)中的應(yīng)用

內(nèi)核開發(fā):gcc

應(yīng)用開發(fā):gcc / g++ / gdc

2 初識(shí)編譯器

●gcc將代碼編譯成可執(zhí)行程序的過程會(huì)完成預(yù)處理(preprocessing)、編譯(compilation)、匯編(assembly)、鏈接(linking)四個(gè)步驟

●編譯器由預(yù)處理器(cpp工具,C Preprocessor)、編譯器(cc工具,C and C++ compiler)、匯編器(as工具,assembler)、連接器(ld工具)組成

3 gcc關(guān)鍵編譯選項(xiàng)

3.1 預(yù)處理指令

3.1.1 指令格式

gcc -E file.c -o file.i

3.1.2 預(yù)處理文件相關(guān)內(nèi)容

從file.i文件中我們可以看到存在大量的以“#”開頭的行。每行的格式是“# 行號(hào) 文件名 標(biāo)志“,其中的”行號(hào)“與”文件名“表示從它后一行開始的內(nèi)容來源于哪一個(gè)文件的哪一行;標(biāo)志可以是1、2、3和4四個(gè)數(shù)字,每個(gè)數(shù)字的含義如下:

當(dāng)file.c使用到非系統(tǒng)頭文件且它們不在當(dāng)前目錄下時(shí),需要通過使用gcc的-I參數(shù)加以指定,否則gcc會(huì)因?yàn)闊o法獲得必要的頭文件進(jìn)行宏展開而報(bào)錯(cuò)。

3.2 編譯指令

3.2.1 指令格式

gcc -S file.i -o file.sgcc -S -O2 file.c -o file.s

3.2.2 說明

使用-S參數(shù)時(shí),我們可以根據(jù)需要使用-O選項(xiàng)。

3.3 匯編指令

3.3.1 指令格式

gcc -c file.s -o file.o

3.4 生成映射文件

3.4.1 指令格式

gcc -Wl,-Map=file.map file.c

3.4.2 說明

映射文件是通過ld鏈接器來生成的,我們可以通過映射文件了解一個(gè)程序文件中各符號(hào)在內(nèi)存中的布局信息。gcc的-Wl選項(xiàng)用于指定傳遞給鏈接器的選項(xiàng),-Map=file.map選項(xiàng)由gcc傳遞給鏈接器以指示鏈接器為我們生成名為file.map的映射文件。在使用-Wl選項(xiàng)時(shí),它后面的選項(xiàng)如有多個(gè)則需要用逗號(hào)加以分割。

3.5 宏定義

3.5.1 指令格式

gcc -D'TEST="test"' file.c

3.5.2 說明

如果宏為字符串時(shí),則需要用單引號(hào)引起來。

3.6 獲取系統(tǒng)頭文件路徑

3.6.1 指令格式

gcc -v file.c

3.6.2 說明

系統(tǒng)頭文件是指C語言本身和操作系統(tǒng)相關(guān)的頭文件。在使用-v選項(xiàng)獲取系統(tǒng)頭文件路徑時(shí),必須后面帶一個(gè)有效的C程序源文件,否則gcc輸出的信息將不包含系統(tǒng)頭文件路徑這一內(nèi)容。

3.7 生成依賴關(guān)系

3.7.1 指令格式

獲取目標(biāo)的完整依賴關(guān)系:gcc -M test.c獲取目標(biāo)的部分依賴關(guān)系:gcc -MM test.c

3.7.2 說明

由于系統(tǒng)頭文件在絕大多數(shù)情形下是不會(huì)改變的,因此在構(gòu)造make所需的依賴關(guān)系時(shí)不必將它們納入其中。通過-MM選項(xiàng),可以讓gcc生成不包含系統(tǒng)頭文件的依賴關(guān)系。

3.8 指定庫文件及庫文件搜索路徑

3.8.1 指令格式

-L選項(xiàng):指定庫文件的搜索路徑-l選項(xiàng):指定庫文件ar crs libfunc.a func.ogcc test.c -L. -lfunc

3.8.2 說明

注意,-L選項(xiàng)用于告訴gcc可以從哪個(gè)目錄查找?guī)煳募?,可以多次使用它以指定多個(gè)目錄;-I選項(xiàng)則用于告訴gcc在生成可執(zhí)行程序時(shí)需要鏈接的庫名,這一選項(xiàng)同樣可以多次使用以指定多個(gè)庫。使用-l選項(xiàng)時(shí)要注意后面所跟的名字并不包括“l(fā)ib”前綴和“.a”后綴。

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

    關(guān)注

    5060

    文章

    18975

    瀏覽量

    302094
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7595

    瀏覽量

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

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49017

原文標(biāo)題:初識(shí)?嵌入式C語言編譯器:GCC

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式操作系統(tǒng)有哪些

      1.嵌入式Linux  嵌入式Linux(Embedded Linux)是標(biāo)準(zhǔn)Linux經(jīng)過小型化裁剪處理之后的專用Linux操作系統(tǒng),能夠固化于容量只有幾KB或者幾MB的存儲(chǔ)器芯片或者單片機(jī)中
    發(fā)表于 06-20 15:13

    嵌入式Linux操作系統(tǒng)的使用

    這是第一次接觸嵌入式設(shè)計(jì)課程,課程設(shè)計(jì)內(nèi)容目標(biāo)如下:1、了解嵌入式技術(shù);2、掌握嵌入式Linux操作系統(tǒng)的使用;(命令)3、掌握嵌入式Lin
    發(fā)表于 11-08 06:43

    嵌入式實(shí)時(shí)操作系統(tǒng)教程

    嵌入式實(shí)時(shí)操作系統(tǒng)教程:以VRTX為對(duì)象詳細(xì)介紹了嵌入式實(shí)時(shí)操作系統(tǒng)的原理和應(yīng)用,特別是第一部分關(guān)于嵌入式實(shí)時(shí)
    發(fā)表于 04-19 21:55 ?44次下載
    <b class='flag-5'>嵌入式</b>實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>教程

    源碼公開的嵌入式實(shí)時(shí)操作系統(tǒng)T-Kernel

     本文主要講述的是源碼公開的嵌入式實(shí)時(shí)操作系統(tǒng)T-Kernel。
    發(fā)表于 04-24 10:55 ?25次下載

    嵌入式操作系統(tǒng)uClinux和eCos的比較

    uClinux和eCos操作系統(tǒng)是兩種性能優(yōu)良、源碼公開且被廣泛應(yīng)用的免費(fèi)嵌入式操作系統(tǒng)。本文通過對(duì)uclinux和eCos的對(duì)比,分析和總結(jié)了嵌入
    發(fā)表于 04-18 08:36 ?1682次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>uClinux和eCos的比較

    嵌入式操作系統(tǒng)的網(wǎng)絡(luò)加載實(shí)現(xiàn)

      在復(fù)雜的應(yīng)用系統(tǒng)中通常需要嵌入式操作系統(tǒng)的支持,這樣嵌入式操作系統(tǒng)鏡像文件的尺寸往往就會(huì)變
    發(fā)表于 08-25 14:02 ?1248次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>的網(wǎng)絡(luò)加載實(shí)現(xiàn)

    嵌入式操作系統(tǒng)-李春杰

    主要內(nèi)容: 嵌入式操作系統(tǒng)概述 典型嵌入式操作系統(tǒng)介紹 嵌入式操作系統(tǒng)選型
    發(fā)表于 01-04 18:30 ?0次下載

    UCOS-II:源碼公開的實(shí)時(shí)嵌入式操作系統(tǒng)

    UCOS-II:源碼公開的實(shí)時(shí)嵌入式操作系統(tǒng)。
    發(fā)表于 04-20 13:55 ?9次下載

    嵌入式操作系統(tǒng)是什么_嵌入式操作系統(tǒng)有哪些

    嵌入式操作系統(tǒng)(Embedded OperatingSystem,簡稱:EOS)是指用于嵌入式系統(tǒng)操作系統(tǒng)。
    發(fā)表于 04-08 14:36 ?2.1w次閱讀

    Linux嵌入式操作系統(tǒng)有哪些優(yōu)勢(shì)

    嵌入式Linux操作系統(tǒng)是將Linux操作系統(tǒng)進(jìn)行裁剪,使Linux操作系統(tǒng)能夠在嵌入式計(jì)算機(jī)系統(tǒng)
    發(fā)表于 07-10 16:34 ?5072次閱讀

    嵌入式操作系統(tǒng)如何應(yīng)用_嵌入式操作系統(tǒng)的組成

    本文首先介紹了入操作系統(tǒng)的特點(diǎn),其次闡述了嵌入式操作系統(tǒng)的應(yīng)用,最后介紹了嵌入式操作系統(tǒng)的組成
    發(fā)表于 09-01 16:36 ?3568次閱讀

    什么是嵌入式操作系統(tǒng) 常見的嵌入式系統(tǒng)有哪些

    、INTEGRITY、OSE、C ExecuTIve  什么是嵌入式操作系統(tǒng) 嵌入式操作系統(tǒng)是一種支持嵌入式
    發(fā)表于 10-21 09:36 ?27次下載
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b> 常見的<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>有哪些

    嵌入式操作系統(tǒng)

    參考:[1] 《嵌入式系統(tǒng)軟件及操作系統(tǒng)》1、嵌入式操作系統(tǒng)的功能在嵌入式
    發(fā)表于 10-21 11:21 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>

    嵌入式操作系統(tǒng)

    嵌入式操作系統(tǒng)一、嵌入式操作系統(tǒng)概述1.1 嵌入式操作系統(tǒng)的特點(diǎn)1.2
    發(fā)表于 11-03 18:36 ?46次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>

    什么是嵌入式操作系統(tǒng)?

    嵌入式操作系統(tǒng)是一種專門的操作系統(tǒng)(OS),旨在為非計(jì)算機(jī)的設(shè)備執(zhí)行特定任務(wù)。嵌入式操作系統(tǒng)的主要工作是運(yùn)行允許設(shè)備完成其工作的代碼。
    的頭像 發(fā)表于 12-23 15:33 ?7615次閱讀
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統(tǒng)</b>?