Linux下開發工具備註
編輯器-Vim
都知道vim是Linux下的編輯器之神,當然還有emacs也是特別NB的,個人在Linux下比較常用的也就是Vim了,接下來說說vim的一些配置技巧:
配置常見的程式碼模板
func Setfilehead()
call append(0, '/***********************************************')
call append(1, '# Filename: '.expand("%"))
call append(2, '# Author: Tim [email protected]')
call append (3, '# Description: ---')
call append(4, '# Create: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(5, '# Last Modified: '.strftime("%Y-%m-%d %H:%M:%S"))
call append(6, '***********************************************/')
call append(7, '')
call append(8, '#include <stdio.h>' )
call append(9, '#include <stdlib.h>')
call append(10, '#include <unistd.h>')
call append(11, '#include <sys/types.h>')
call append(12, '')
call append(13, 'int main(int argc, char *argv[]){')
call append(14, '')
call append(15, ' return 0;')
call append (16, '}')
endfunc
"對映F1快捷鍵,生成後跳轉至第14行,然後進入vim的插入模式
map <F1> :call Setfilehead()<CR>:14<CR>o
這樣的話只要新建原始檔的時候按一下F1,程式碼就會自動新增到原始檔中了!
已經配置好的Vim
這裡推薦使用幾個開源專案: 《VimForCpp》 這個目前只適用於CentOS7,其他版本後續才會支援! 《space-vim》這個也是比較好用的一個vim,外掛都是一句程式碼全部搞定!
vim和emacs的比較
- VIM和emacs是可以高度可定製化的編輯器,特別是emacs算是unix下的第一個“人工智慧生命”,經過定製化以後幾乎可以幹任何事情,VIM在高度定製化以後的編輯速度(當然,前提是你要熟悉它的幾種工作模式,特別是快捷鍵的應用),幾乎是其它編輯器不可匹敵的
- VIM和emacs屬於神器級別的東西,用的好就是神器,用不習慣它就是垃圾,對於大部分人來說他們都是需要比較長的時間才能上手的東西,而UE這樣的屬於已經給你定製好了,但是沒有過多可定製選項的編輯器,方便上手,但是擴充套件效能就不怎麼樣了
編譯器-gcc
gcc是"GNU Compiler Collection"的縮寫
-I:指定標頭檔案路徑 -On:n=0~3,編譯器優化,n越大優化等級越高 -Wall:提示更多的警告資訊 -D:編譯器時定義巨集,注意-D和巨集之間沒有空格 -g:包含除錯資訊 這樣編譯才能被GDB除錯 -C 告訴前處理器不要丟棄註釋。配合`-E’選項使用。 -M:生成與.c和標頭檔案的依賴關係以用於Makefile,包括系統庫的標頭檔案 -MM:生成與.c和標頭檔案的依賴關係以用於Makefile,不包括系統庫的標頭檔案 -v可以檢視gcc的版本資訊,但是要是在gcc -v 後面加上一個原始檔例如,gcc -v main.c,這樣可以獲得gcc所使用的系統標頭檔案。
GCC編譯C/CPP程式步驟
① 預處理:標頭檔案展開、巨集替換、去註釋
gcc -E -o hello.i hello.c
② 編譯:語法檢查、生成彙編程式碼
gcc -S -o hello.s hello.i
③ 彙編:彙編程式碼------->機器碼
gcc -c -o hello.o hello.s
④ 連結:連結為可執行檔案
gcc -o hello hello.o
readelf命令
readelf命令用來顯示一個或者多個elf格式的目標檔案的資訊,可以通過它的選項來控制顯示哪些資訊。
ELF(Executable and Linking Format)是一個定義了目標檔案內部資訊如何組成和組織的檔案格式。核心會根據這些資訊載入可執行檔案,核心根據這些資訊可以知道從檔案哪裡獲取程式碼,從哪裡獲取初始化資料,在哪裡應該載入共享庫,等資訊。
ELF檔案有下面三種類型:
1.目標檔案
gcc -c test.c
得到的test.o就是目標檔案,目標檔案通過連結可生成可執行檔案。
靜態庫其實也算目標檔案,靜態庫是通過ar命令將目標打包為.a檔案。
如:ar crv libtest.a test.o
2.可執行檔案
gcc -o test test.c
得到的test檔案就是可執行的二進位制檔案。
3.共享庫
gcc test.c -fPIC -shared -o libtest.so
得到的檔案listtest.so就是共享庫。
可以通過readelf來區分上面三種類型的ELF檔案,每種型別檔案的頭部資訊是不一樣的!
實現一個彩色的進度條
注意點:printf()是按行緩衝的、sleep()與usleep()函式的單位、如何列印彩色字型
/*************************************************************************
> File Name: main.c
> Author: Tim
> Mail: [email protected]
> Created Time: 2018年09月21日 星期五 03時23分51秒
************************************************************************/
#include<unistd.h>
#include<stdio.h>
int main(int argc, char *argv[])
{
char buf[102] = {0};
int i = 0;
//注意這裡需要使用轉義字元
char arr[4] = "/-|\\";
for(i= 0;i<=100;i++)
{
buf[i] = '*';
if(i<40)
printf("[\033[0;31m%-100s\033[0;39m] [%d%%][%c]\r", buf,i,arr[i%4]);//進度條顏色修飾
else if(i>=40 && i< 80)
printf("[\033[0;33m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
else
printf("[\033[0;32m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
//printf("[%-100s] [%d%%][%c]\r",buf,i,arr[i%4]);
//printf是按行緩衝的,所以需要重新整理緩衝區
fflush(stdout);
//usleep的單位是微秒
usleep(50000);
}
//最後需要換行
printf("\n");
return 0;
}
yum與rpm安裝的區別
原始碼安裝
- 絕大多數開源軟體都是直接以原碼形式釋出的
- 原始碼一般會被打成.tar.gz的歸檔壓縮檔案
- 原始碼需要編譯成為二進位制形式之後才能夠執行使用
- 原始碼基本編譯流程:
- configure 檢查編譯環境;
- make對原始碼進行編譯;
- make insall 將生成的可執行檔案安裝到當前計算機中
rpm安裝
1.原始碼形式的特點:操作複雜、編譯時間長、極易出現問題、依賴關係複雜
2.為了方便,RPM(redhat package manager)
3.RPM通過將程式碼基於特定平臺系統編譯為可執行檔案,並儲存依賴關係,來簡化開源軟體的安裝管理。針對不同的系統設定不同的包
4.常用命令規範:linuxcast-1.2.0-30.el6.1686.rpm 包名-版本號-適用平臺-32/64-rpm
5.使用rpm –i software.rpm(安裝);
rpm -e software.rpm
(解除安裝);
rpm –U software.rpm
(升級形式安裝);
rpm –ivh http://www.linuxcast.net/software.rpm
(支援通過http\ftp協議形式安裝)
-v 顯示詳細資訊;-h顯示進度條
yum安裝
rpm軟體包形式的管理雖然方便,但是需要手工解決軟體包的依賴關係。很多時候安裝一個軟體安裝一個軟體需要安裝1個或者多個其他軟體,手動解決時,很複雜,yum解決這些問題。Yum是rpm的前端程式,主要目的是設計用來自動解決rpm的依賴關係,其特點:
- 自動解決依賴關係;
- 可以對rpm進行分組,基於組進行安裝操作;
- 引入倉庫概念,支援多個倉庫
- 配置簡單
yum倉庫用來存放所有的現有的.rpm包,當使用yum安裝一個rpm包時,需要依賴關係,會自動在倉庫中查詢依賴軟體並安裝。倉庫可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、統一的網路倉庫。 倉庫的配置檔案/etc/yum.repos.d目錄下
- yum install 安裝;
- yum remove解除安裝;