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