前言:
本人14年畢業一直從事嵌入式開發,從微控制器程式+電路+pcb設計+物料採購+除錯焊接+批量生產+文件整理。那個心碎呀。。
言歸正傳,對linux一直有接觸,但是一直沒有整理,感覺零零散散,一點都不圓潤。在此從零整理linux,也給自己梳理開發流程,總結開發過程,勿重複造輪子,時間就是金錢,效率就是生命。每項技能吸收成自己的技術,靈活應用,盡早跨過學習成長期,延長收入期。
gcc編譯
4個流程:
總結如下:通俗易懂,不失章節。
預處理(pre-processing
)、編譯(
compiling
)、彙編(
assembling
)、鏈結(
linking)
hello.c
#include
void main()
printf("wowowo");
第一步(預處理)
gcc
–ehello.c –o hello.i
gcc將stdio.h
編譯進來。
第二步(編譯)
gcc
–shello.i –o hello,s
gcc檢查**規範性、語法等、無誤後將**編譯成組合語言。
第三步(彙編)
gcc
–chello.s –o hello.o
gcc將彙編**轉化成二進位制**。
第四步(鏈結)gcc會到系統預設路徑」/usr/lib」下進行查詢 ,及鏈結libc.so.6函式中去。
gcc hello.o –o hello
擴充套件語錄:工作中很少每一步都逐個編譯,都是一步到位,生成hello檔案。
函式庫:一般在使用第三方的應用的時候會涉及到函式庫,比如ssh,加密等。 .a
動態庫:編譯鏈結時,未把庫檔案**加到檔案中,在程式執行時鏈結檔案載入庫。字尾
表示在/root/test/
目錄下搜尋標頭檔案。
linux
中標頭檔案預設放到「
/usr/include
」目錄下。
include < 123.h> :表示在標準路徑中搜尋標頭檔案(注:預設為「
/usr/include」,也可以將*.h所在路徑新增到系統環境變數中)。
include
「123.h」
:表示在本目錄中優先搜尋。
-ldir
gcc hello.c –l /root/test/lib –lsunq –o hello 表示
hello.c
需要用到
/root/test/lib
目錄下的乙個動態庫
libsunq.so 由於
linux
下的庫檔案命名規定:必須以l、
i、b 3個字母開頭。因此在用
-l選項指定鏈結的庫檔名時可省去l、
i、b 3個字母。
gcc對
-lsunq
處理時,自動連線名為
libsunq.so
的檔案
「-i dir
」和「-l dir
」都只是指定路徑,未指定檔案,因此不能在路徑中包含檔名。
靜態庫製作:
gcc –
chello.
c->
得到:hello.o ar
crvlibmylib
.ahello
.o得到
libmylib.a
通過ar t libmylib.a
可以檢視
libmylib.a
中包含的目標檔案。
總結:1、預處理階段
僅僅將#include」***.h」
中的需要檔案載入進來(經過
#if 0 #endif
處理後載入)。
條件:c檔案中必須有標頭檔案,必須可找到標頭檔案。可以沒有庫或函式實現體。(
-i 找到標頭檔案路徑即可,無需指定具體
.**件)。
2、編譯
無需任何外部資源,檢查即可。
3、彙編
對應的g++/gcc
編譯;
無需其他資源。
4、鏈結 使用
-l 指定庫路徑
-llibray
(指定庫名字)
動態庫
.so動態庫 .a
靜態庫
結語:
Python入門第一步
我覺得,開始學習一門程式設計時候,不僅僅是要去學習它的語法,而是在給你一段 的時候,你能夠對這段 的主要結構在心裡面有乙個大致的框架,也就是你要知道這一塊是幹什麼的,那一塊又是幹什麼的,然後再一塊一塊的詳細去看 的具體語句。1.物件是在應用程式中使用的 組合成乙個單一的實體的資料。例如,物件導向使用...
OPENCV入門第一步
很仰慕opencv,從未使用過,現在終於邁出了第一步,以茲記錄。目的 將opencv源 編譯後,在codeblock環境下使用。工作環境 opencv4.2.0,codeblock17.12,cmake3.12.2,win10。準備工作 1 入門的幾個小步驟 4.2.0 tar gz step2 使...
Django開發第一步
1 django組成部分筆記 組成部分 含義django admin.py 用於管理任務的命令列工具 manage.py 命令列使用工具,使用者django應用進行各種互動 python manage.py runserver 127.0.0.1 80 啟動專案程式和埠 manage.py crea...