C 語言 靜態庫和動態庫的建立和應用

2022-04-04 08:51:56 字數 2023 閱讀 5682

---------- getpi.c

double getpi(void)

---------- mylib.h

#ifndef _mylib_h_

#define _mylib_h_

void say(const char *str);

double getpi(void);

#endif //_mylib_h_

---------- run.bat

@prompt me#$s

rem 生成靜態庫 mylib.a

gcc -o say.o -c say.c

gcc -o getpi.o -c getpi.c

ar rs mylib.a say.o getpi.o

del *.o

rem 生成 位置無關的動態庫 mylib.dll

gcc -c -fpic say.c getpi.c

gcc -shared -o mylib.dll say.o getpi.o

del *.o

rem test.c 靜態鏈結 mylib.a

gcc -o static.exe test.c -l. ./mylib.a

rem test.c 動態庫鏈結 mylib.dll

gcc test.c -o dynamic.exe -l. -lmylib

pause

---------- say.c

#include void say(const char *str)

---------- test.c

#include #include "mylib.h"

int main(void)

// windows 平台

--> rem 生成靜態庫 mylib.a

--> gcc -o say.o -c say.c

--> gcc -o getpi.o -c getpi.c

--> ar rs mylib.a say.o getpi.o

--> del *.o

--> rem 生成 位置無關的動態庫 mylib.dll

--> gcc -c -fpic say.c getpi.c

say.c:1: warning: -fpic ignored for target (all code is position independent)

getpi.c:1: warning: -fpic ignored for target (all code is position independent)

--> gcc -shared -o mylib.dll say.o getpi.o

--> del *.o

--> rem test.c 靜態鏈結 mylib.a

--> gcc -o static.exe test.c -l. ./mylib.a

--> rem test.c 動態庫鏈結 mylib.dll

--> gcc test.c -o dynamic.exe -l. -lmylib

--> pause

請按任意鍵繼續. . .

// linxu 平台

# 生成靜態庫 mylib.a

gcc -o say.o -c say.c

gcc -o getpi.o -c getpi.c

ar rs mylib.a say.o getpi.o

rm *.o

# 生成 位置無關的動態庫 mylib.so

gcc -c -fpic say.c getpi.c

gcc -shared -o mylib.so say.o getpi.o

rm *.o

# test.c 靜態鏈結 mylib.a

gcc -o static test.c -l. ./mylib.a

# test.c 動態庫鏈結 mylib.dll

gcc test.c -o dynamic -l. ./mylib.so

pause

靜態庫和動態庫的建立和使用

靜態庫 靜態庫是在程式執行之前就編譯到目標程式去了 優點 執行快 缺點 占用空間大 靜態庫的建立 生成xx.a檔案 1.gcc cal.c c 函式檔案 生成 o檔案 2.ar rcs libcalcul.a 需要生成的.a檔案 cal.o 一般用lib開頭,便於砍頭去尾 3.gcc calcula...

靜態庫動態庫的建立和呼叫

靜態庫的建立 靜態庫字尾通常以.a結尾,鏈結生成靜態庫時需要使用ar命令。常用引數 r 在庫中插入 修改 模組 替換靜態庫 當插入的模組名已經在庫中存在,則替換同名的模組,如若干模組中有乙個模組在庫中不存在,則ar顯示乙個 錯誤資訊,並且不會替換其他同名模組 c 建立乙個新的庫。不管庫是否存在,都將...

Windows靜態庫和動態庫的建立和使用

靜態鏈結庫 static libary 偶們用vs2005做乙個靜態鏈結庫先 開啟vs2005,新建 專案 staticcai win32控制台應用程式 新建static lib.h 和static lib.cpp 兩個檔案,這兩個檔案的內容如下 static lib.h int add int x...