Linux編程學習二
C 語言看的差不多了,Linux編程從哪裏入手呢?
首先我們要了解一些基本的知識,比如庫文件,shell編程。
靜態庫文件:*.a
缺點:同一時間運行多個程序而它們又來自同一個函數庫裏的函數時,內存中就會存在同一函數的多份
拷貝,在程序文本中也存在多份拷貝,浪費內存和硬盤
創建一個自己的靜態庫文件:
1).函數bill.c
/* code */
#include <stdio.h>
void bill(char * arg)
{
printf("bill: you passed %s/n",arg);
}
/* code */
編譯:$ gcc -c bill.c 生成bill.o文件
2).爲函數建立頭文件lib.h
/* code */
void bill(char *)
/* code */
3).寫個程序program.c調用剛纔的函數:
/* code */
#include "lib.h"
int main()
{
bill("hello world");
exit(0);
}
/* code */
編譯: $ gcc -c program.c
$ gcc -o program program.c bill.o
$ ./program
4).用ar程序建立一個檔案:
$ ar crv libfoo.a bill.o
爲函數庫建立一個內容表(在Berkley Unix中,在linux中並不必要):
$ ranlib libfoo.a
現在我們就可以用函數庫了:
$ gcc -o program program.c libfoo.a
也可以通過-L來告訴編譯器哪裏能夠找到它:
$ gcc -o program program.c -L. -lfoo
-L 告訴編譯器在當前目錄下查找函數庫
共享庫文件:*.so,*.sa
它本身不包含函數的代碼,而只保存共享代碼的調用線索,共享代碼在該程序運行的時候才加入到
其中。當編譯好的程序被加載到內存中準備執行的時候,函數的調用線索被解析,程序校共享庫發出
調用,共享庫只在必要的時候才被加載到內存中。在內存中只保留一份共享庫拷貝供許多程序使用。
查看程序調用了哪些共享庫:
$ ldd 可執行程序名
shell編程我就不多介紹了,但它是基礎中的基礎,必要掌握。我覺得能看懂shell腳本就可以了。
首先我們要了解一些基本的知識,比如庫文件,shell編程。
靜態庫文件:*.a
缺點:同一時間運行多個程序而它們又來自同一個函數庫裏的函數時,內存中就會存在同一函數的多份
拷貝,在程序文本中也存在多份拷貝,浪費內存和硬盤
創建一個自己的靜態庫文件:
1).函數bill.c
/* code */
#include <stdio.h>
void bill(char * arg)
{
printf("bill: you passed %s/n",arg);
}
/* code */
編譯:$ gcc -c bill.c 生成bill.o文件
2).爲函數建立頭文件lib.h
/* code */
void bill(char *)
/* code */
3).寫個程序program.c調用剛纔的函數:
/* code */
#include "lib.h"
int main()
{
bill("hello world");
exit(0);
}
/* code */
編譯: $ gcc -c program.c
$ gcc -o program program.c bill.o
$ ./program
4).用ar程序建立一個檔案:
$ ar crv libfoo.a bill.o
爲函數庫建立一個內容表(在Berkley Unix中,在linux中並不必要):
$ ranlib libfoo.a
現在我們就可以用函數庫了:
$ gcc -o program program.c libfoo.a
也可以通過-L來告訴編譯器哪裏能夠找到它:
$ gcc -o program program.c -L. -lfoo
-L 告訴編譯器在當前目錄下查找函數庫
共享庫文件:*.so,*.sa
它本身不包含函數的代碼,而只保存共享代碼的調用線索,共享代碼在該程序運行的時候才加入到
其中。當編譯好的程序被加載到內存中準備執行的時候,函數的調用線索被解析,程序校共享庫發出
調用,共享庫只在必要的時候才被加載到內存中。在內存中只保留一份共享庫拷貝供許多程序使用。
查看程序調用了哪些共享庫:
$ ldd 可執行程序名
shell編程我就不多介紹了,但它是基礎中的基礎,必要掌握。我覺得能看懂shell腳本就可以了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.