1、gcc編譯器
(1)簡介
前期的gcc是gnu c compiler,僅僅用於c語言的編譯,經過多年的發展,現在的gcc為gnu compiler collection,並且目前支援多種程式語言的編譯。
(2)gcc的編譯過程
1)預處理
主要是完成標頭檔案的展開,c檔案中巨集的替換展開,去掉有關的注釋。
-e:生成預處理的檔案
-o:生成目標檔案
2)編譯
預處理後的檔案仍然是c檔案,編譯的過程是把c檔案編譯成彙編檔案。
-s:生成彙編檔案
3)彙編
將彙編檔案變成二進位制檔案。
-c:編譯子程式
4)鏈結
(3)其它命令引數
1)檢視gcc版本號:-v / --version
2)指定頭檔案目錄:-i + 目錄
3)編譯時定義巨集:-d
4)編譯優化:-on (n=0-3:當n為0不優化,當n為3優化級別最高)
6)包含除錯資訊:-g (gdb除錯需要加此引數)
2、靜態庫
(1)命名規則
1)lib + 庫的名字 + .a
2)例如:libmytest.a(庫的名字為mytest)
(2)製作步驟
1)生成對應的.o檔案,編譯時新增-c引數
命令:gcc mytest.c -c
2)將生成的.o檔案打包
命令:ar rcs + 靜態庫的名字(libmytest.a)+ 生成的所有.o檔案
(3)發布和使用靜態庫
1)將打包好的lib和標頭檔案發布出去,標頭檔案提供api介面的相關資訊
2)靜態庫使用方法
(4)優缺點
優點:1)發布程式的時候,不需要提供相應的庫
2)載入庫的速度快
缺點:1)庫被打包到應用程式中,導致應用程式的體積很大
2)一旦庫發生了變化,則應用程式需要重新編譯
3、共享庫(動態庫)
(1)命名規則
1)lib + 庫的名字 + .so
2)例如:libmytest.so
(2)製作步驟
1)生成與位置無關的**(生成與位置無關的.o檔案)
命令:gcc -fpic -c *.c -i + 標頭檔案路徑
2)將.o打包成共享庫(動態庫)
(3)發布和使用共享庫
發布:將.so檔案和標頭檔案進行發布
使用:(4)程式執行時動態庫無法被載入的問題解決
解決:1)將動態庫拷貝到路徑/lib中去(不允許使用)
2)將動態庫路徑新增到額外的鏈結環境變數ld_library_path
命令:export ld_library_path=./lib(動態庫的路徑)
3)將ld_library_path永久改變
修改~/.bashrc配置檔案,在檔案最後export
4)通過修改動態聯結器的配置檔案
1)需要找到動態鏈結器的配置檔案
命令:ls -l /etc/ld.so.conf
2)動態庫的路徑寫入到配置檔案中
命令:vim /etc/ld.so.conf
3)將動態庫的路徑新增到最後一行,然後儲存退出vim
4)更新鏈結配置檔案
命令:sudo ldconfig -v
(5)優缺點
優點:1)應用程式的體積小
2)動態庫更新,不一定需要重新編譯應用程式
缺點:1)發布程式的時候,需要發布動態庫給使用者
2)動態庫並沒有打包到應用程式中去,載入速度相對較慢
Linux常用基礎
date 日期 cat etc shells 檢視當前系統中支援哪些shell echo shell 檢視當前系統正在使用的命令解析 命令補齊快捷鍵 tab cd 進入根目錄 cd 進入使用者目錄 ls l 目錄名稱 檢視此目錄詳細資訊 ls a 顯示隱藏檔案 ls dl filename 檢視目錄...
php常用基礎 三
fastcgi 和 php fpm的區別 cgi連線webservice和php解析器的乙個協議 fastcgi是cgi的改良版本 php fpm程序管理器 fastcgi web和php通訊的協議 通過fpm來完成 php fpm fastcgi的程序管理器 master worker程序來處理請...
Linux常用基礎命令
linux常用基礎命令 2.ls 檢視目錄或者檔案的屬 列舉出任一目錄下面的檔案 eg ls usr man ls l a.d表示目錄 directory 如果是乙個 表示是檔案,如果是l則表示是乙個連線檔案 link b.表示檔案或者目錄許可許可權.分別用可讀 r 可寫 w 可執行 x 3.cp ...