FFMpeg開發前的準備-C基礎以及編譯靜態庫和動態庫

Vim 基本操作

拷貝:yy/yw
粘貼:p
刪除:dd/dw

光標移動(命令行模式): h(左移)/j(下移)/k(上移)/l(右移動)
跳轉到文件頭:gg
跳轉到文件尾部:G

跳轉到行頭:^
跳轉到行尾:$

查找和替換:
查找關鍵字(命令模式下):/關鍵字
查找與替換: :%s/關鍵字/替換字/gc
顯示行號:set number
指定範圍替換:21,23s/Magic/Joy/gc

多窗口:
分窗口:
split 橫向分屏
vsplit 垂直分屏
窗口鍵跳轉:
crtl+w/
ctrl+w+[h/j/k/l]

C開發
1.HelloWorld

#include <stdio.h>

int main(int args,char* arg[])
{
	printf("HellloWorld!\n");
}

2.常量和變量

常量通常使用const 修飾符

const int length = 5;

3.指針
物理意義:本身就是一個內存地址,除了可以改變本身內存地址,也可以改變存儲的內存地址的值

函數指針:

int sum(int a,int b)
{
return a+b;
}

int main()
{
int (*fun)(int ,int);
fun = sum;

int sum=fun(3,4);
}

4.文件操作

文件類型:FILE* file
打開文件: FILE* fopen(path,mode) 
關閉文件:fclose(FILE*)

5.編譯器
GCC:在Linux下使用
CLANG:在MAC下使用

基本命令格式:gcc/clang -g -O2 -o test test.c 
-g :輸出文件中的調試信息,但不調試
-O:對輸出文件做指令優化,-O2優化
-o:輸出可執行文件的名字
-I:指定頭文件目錄
-L:指定庫文件位置
-l:指定具體使用哪個庫

6.編譯過程
(1)預編譯
加載頭文件,和源代碼合併在一個文件中
(2)編譯
(3)鏈接,動態/靜態鏈接

7.編譯舉例
(1)編譯一個文件爲靜態庫
比如有一個c文件中,只有一個add方法(需要配套的.h)

gcc -c add.c
執行完畢後會生成一個.o
ar rcs libmylib.a add.o
執行完畢後會生成一個靜態庫libmylib.a
編寫引用此靜態庫的文件
gcc test.c -o test -L . -I . -lmylib 

(2)編譯一個文件爲動態庫
比如有一個c文件中,只有一個add方法(需要配套的.h)

gcc add.c -fPIC -shared -o libadd.so
執行完畢後會生成一個So
編寫一個測試文件testShareLib.c
gcc testShareLib.c -L . -ladd -o test
鏈接動態庫
輸入ldd test或者直接指定./test都會提示找不到這個libadd.so庫
此時需要將libadd.so 移動到/usr/lib/下
再執行就成功運行了

8.調試器
Linux gdb ,Mac lldb
前提:編譯輸出的程序需要-g
調試信息包含:指令地址、對應源代碼以及行號

gdb\lldb 命令
設置斷點:b
運行程序:r
單步執行:n
跳入函數:s
跳出函數:finish
打印內容:p 	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章