C 语言与动态库相关基础知识
1、導(dǎo)入文件<>和“”的區(qū)別
#include <xxx.h>導(dǎo)入的是標(biāo)準(zhǔn)目錄下的.h文件,所謂的標(biāo)準(zhǔn)目錄指的是:/use/local/include(一般是第三方頭文件)以及/use/incldue(一般是操作系統(tǒng)頭文件)、c:\\MinGnu\include(如果使用的是MinGun編譯器windows下的MinGun目錄)
#include "xxx.h"導(dǎo)入的是當(dāng)前目錄下的文件
2、共享.h文件
2.1 把頭文件保存在標(biāo)準(zhǔn)目錄下,把文件復(fù)制到/usr/local/include中就可以在源代碼中使用尖括號(hào)包含它們,如:#include <encrypt.h>
2.2 在include中使用完整路徑,如把頭文件存放在/home/xinye中,只要使用#include "/home/xinye/encrypt.h"即可
2.3 在使用編譯命令的時(shí)候,告訴編譯器去哪里找到頭文件,所以用gcc 的-I選項(xiàng),如:gcc -I/my_headfiles??test.c test2.c -o test
將在標(biāo)準(zhǔn)目錄以及指定的目錄my_headfiles目錄下查找頭文件
3、共享.o目標(biāo)文件
使用完整路徑名稱來(lái)共享.o目標(biāo)文件
gcc -I/my_headfiles test1.c test2,c
/my_obj_files/encrypt.o
/my_obj_files/checksum.o
-o test_code
4、歸檔多個(gè).o文件 - 靜態(tài)庫(kù)
nm xxx.a:查看xxx.a中包含的.o文件列表
ar -rcs libnfsecurity.a encrypt.o checksum.o
ar:歸檔命令
r:如果.a文件存在就更新它
c:表示創(chuàng)建文檔時(shí)不顯示反饋信息
s:告訴ar要在.a文件開(kāi)頭創(chuàng)建索引
libnfsecurity.a:固定格式文件名,lib開(kāi)頭,.a結(jié)尾
后面的是.o文件里誒波啊
5、在庫(kù)目錄中存放.a文件
5.1 存放在標(biāo)準(zhǔn)目錄中,如/use/local/lib(一般是在開(kāi)發(fā)完成后,但是有些系統(tǒng)不允許用戶修改這個(gè)目錄)
編譯了其他使用了庫(kù)的應(yīng)用(libnfsecurity.a存放在標(biāo)準(zhǔn)目錄下)
gcc test1.c tst2.c test3.c -lhfsecurity -o test
5.2 存放在其他目錄中(一般在開(kāi)發(fā)中,或者是系統(tǒng)不允許放在標(biāo)準(zhǔn)目錄中)
.a存放在自定義目錄/my_lib/lib/libhfsecurity.a
gcc test1.c test2.c test3.c -L/my_lib -lhfsecurity -o test
6、動(dòng)態(tài)庫(kù)
把c文件轉(zhuǎn)為動(dòng)態(tài)庫(kù)之前需要先便以為.o文件:
gcc -I/my_head_dir -fPIC -c test1.c test2.c test3.c -o test.o
-fPIC:表示無(wú)關(guān),一般可有可無(wú)
打包動(dòng)態(tài)庫(kù):
windows下:gcc -shared test.o -o c:\libs\test.dll
windows下的cygwin下:gcc -shared test.o -o /libs/libtest.dll.a
linux下面:gcc -shared test.o -o /libs/libtest.so
mac下面:gcc -shared test.o -o /libs/libtest.dylib
?
例子:
gcc -I/include -c elliptical.c -o elliptical.o
gcc elliptical.o -L/libs -lhfcal -o elliptical
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的C 语言与动态库相关基础知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 远程java接口说明
- 下一篇: 如何使用eclipse打开已有工程