第4 5周作業 編譯器背後的故事

2021-10-24 20:24:05 字數 2981 閱讀 7883

. 請說明可執行程式是如何被組裝的?

1)閱讀、理解和學習材料「用gcc生成靜態庫和動態庫.pdf」和「靜態庫.a與.so庫檔案的生成與使用.pdf」,請在linux系統(ubuntu)下如實仿做一遍。

2)在第一次作業的程式**基礎進行改編,除了x2x函式之外,再擴充套件寫乙個x2y函式(功能自定),main函式**將呼叫x2x和x2y ;將這3個函式分別寫成單獨的3個 .c檔案,並用gcc分別編譯為3個.o 目標檔案;將x2x、x2y目標檔案用 ar工具生成1個 .a 靜態庫檔案, 然後用 gcc將 main函式的目標檔案與此靜態庫檔案進行鏈結,生成最終的可執行程式,記錄檔案的大小。

3)將x2x、x2y目標檔案用 ar工具生成1個 .so 動態庫檔案, 然後用 gcc將 main函式的目標檔案與此動態庫檔案進行鏈結,生成最終的可執行程式,記錄檔案的大小,並與之前做對比。

gcc不是乙個人在戰鬥。請說明gcc編譯工具集中各軟體的用途,了解eff檔案格式,組合語言格式。

1)閱讀、理解和學習材料「linux gcc常用命令.pdf」和「gcc編譯器背後的故事.pdf」,如實仿做一遍。

每乙個程式背後都站著一堆優秀的**庫。了解實際程式是如何借助第三方庫函式完成**設計。

1)了解linux 系統中終端程式最常用的游標庫(curses)的主要函式功能,寫出幾個基本函式名稱及功能;

2)在 win10 系統中,「控制面板」–>「程式」—>「啟用或關閉windows功能」,啟用 「telnet client」 和"適用於linux的windows子系統"(後面會使用)。 然後開啟乙個cmd命令列視窗,命令列輸入 telnet bbs.newsmth.net,以遊客身份體驗一下即將絕跡的遠古時代的 bbs (乙個用鍵盤游標控制的終端程式)。

3)在ubuntu中用 sudo apt-get install libncurses5-dev 安裝curses庫,請說明 標頭檔案(比如curses.h)和庫檔案都被安裝到哪些目錄中;

4)請參考 「linux 環境下c語言編譯實現貪吃蛇遊戲」(或者彈球遊戲(用gcc編譯生成乙個終端遊戲,體會curses庫如何被鏈結和使用。

(有空也可玩玩** 中列舉的10個終端遊戲。

一:首先在目錄中建立本次實驗所需要的資料夾test2

在實驗目錄下建立4個檔案a1.c,a2.c,a.h,test.c並編寫**

**如下:

a1.c:

#include

void

print1

(int arg)

a2.c:

#include

void

print2

(char

*arg)

a.h#ifndef a_h

#define a_h

void

print1

(int);

void

print2

(char*)

;#endif

test.c:

#include

#include

"a.h"

intmain()

最終執行結果如圖:

二:生成.o靜態庫和.so動態庫並比較大小:

在之前的學習中,我們在test檔案中建立了main.c,sub1.c,sub1.h,我們本次實驗再建立兩個檔案sub2.c和sub2.h並編寫**

sub2.c:

#include

"sub2.h"

float

x2y(

int x1,

int x2)

sub2.h:

#ifndef sub2_h

#define sub2_h

float

x2y(

int a,

int b)

;#endif

//sub2_h

接下來將sub1.c和sub2.c編譯成.o檔案:

最終結果如圖:

首先編寫乙個簡單的hellow world程式,,並對程式進行預處理,編譯,彙編,鏈結的操作,結果如圖:

操作所產生的檔案:

以遊客身份體驗一下即將絕跡的遠古時代的 bbs (乙個用鍵盤游標控制的終端程式)

通過windows10控制面板,選擇程式,選擇啟用或關閉windows功能,啟用 「telnet client」 和 「適用於linux的windows子系統」(後面會使用),然後重啟。

通過本次實驗,我詳細的了解了程式編譯的過程,以及如何用 gcc 生成靜態庫(.a)和動態庫(.so),並且用靜/動態庫鏈結生成可執行檔案,也明白了程式是如何借助第三方庫函式完成**設計。

編譯器不識別stm指令 第2章 編譯器簡述

在現代作業系統上,我們常見的檔案一般分為兩種 文字檔案 二進位制檔案 可執行程式 從作業系統的角度講,兩類檔案在儲存時沒有絲毫區別。文字檔案之所以可以直接看到文字資訊,是因為它們被寫入內容時,寫入的都是字元編碼對應的二進位制值,所以按照相同的編碼方式開啟時,就可以看到裡邊的內容。vs code開啟乙...

編譯方舟編譯器

環境 mac os parallels desktop 安裝ubuntu 16.04 安裝基礎包 sudo apt get y install openjdk 8 jdk git core gnupg flex bison gperf build essential zip curl zlib1g ...

方舟編譯器編譯

目錄環境變數 安裝 ninja 和 gn 編譯成功 總結2019.9.1 編譯華為方舟編譯器原始碼 這篇文章僅僅是關於如何搭建環境並進行編譯。本機環境 ubuntu 16 server.一定要好好看參考文件!建議使用root賬戶操作 先 clone 原始碼華為開源平台 對應的參考文件openarkc...