日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第五天2017/04/06(下午3:静态链接库(Lib))

發(fā)布時(shí)間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第五天2017/04/06(下午3:静态链接库(Lib)) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接:http://blog.csdn.net/xiaoding133/article/details/8973436

一、靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)
1.靜態(tài)鏈接庫(kù)(.LIB):函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件。發(fā)布時(shí),只需要發(fā)布這個(gè)可執(zhí)行文件,并不需要發(fā)布被使用的靜態(tài)庫(kù)。
2.動(dòng)態(tài)庫(kù)(.DLL):在使用動(dòng)態(tài)庫(kù)的時(shí)候,往往提供兩個(gè)文件:一個(gè)引入庫(kù)(.lib)文件和一個(gè)DLL(.dll)。雖然引入庫(kù)和靜態(tài)庫(kù)的后綴名相同,但是差別很大。對(duì)于一個(gè)DLL來說,其引入庫(kù)文件包含該DLL導(dǎo)出的函數(shù)和變量的符號(hào)名,而.dll文件包含DLL的實(shí)際的函數(shù)和數(shù)據(jù)。在使用動(dòng)態(tài)鏈接庫(kù)的情況下,在編譯鏈接可執(zhí)行文件時(shí),只需要DLL的引入庫(kù)文件,而在運(yùn)行可執(zhí)行程序時(shí),需要加載所需要的DLL,“發(fā)布產(chǎn)品時(shí),需要發(fā)布調(diào)用的動(dòng)態(tài)鏈接庫(kù)”。

二、靜態(tài)鏈接庫(kù)的創(chuàng)建和引用

【創(chuàng)建靜態(tài)庫(kù)】 //DLL.h頭文件聲明2個(gè)函數(shù):一個(gè)在.cpp中實(shí)現(xiàn),一個(gè)在.c中實(shí)現(xiàn)#ifndef _LIB_H_ #define _LIB_H_ #ifdef __cplusplus #include <iostream> using namespace std; extern "C" { #endifint add(int a, int b); void show(); #ifdef __cplusplus }; #endif#endif ------------------------------------------------------------------------------------------ //define_add.cpp中實(shí)現(xiàn)add()函數(shù) #include "LIB.h" int add(int a,int b) { #ifdef __cplusplusprintf("DLL生成使用成功:add()函數(shù) —— C++編譯環(huán)境\n");return a+b; #elseprintf("DLL生成使用成功:add()函數(shù) —— C編譯環(huán)境\n");return a+b; #endif } ------------------------------------------------------------------------------------------ //define_show.c中實(shí)現(xiàn)show()函數(shù)#include "LIB.h"void show() { #ifdef __cplusplusprintf("\nDLL生成使用成功:show()函數(shù) —— C++編譯環(huán)境\n"); #elseprintf("\nDLL生成使用成功:show()函數(shù) —— C編譯環(huán)境\n"); #endif }【注解】創(chuàng)建和調(diào)用LIB與DLL的相同點(diǎn)、不同點(diǎn) 與創(chuàng)建動(dòng)態(tài)庫(kù)DLL相同點(diǎn):可以實(shí)現(xiàn)C與C++的混合編程#ifdef __cplusplus extern "C"{#endif //函數(shù)的聲明 #ifdef __cplusplus }#endif創(chuàng)建LIB靜態(tài)庫(kù)時(shí),在.h聲明函數(shù),.c或.cpp中實(shí)現(xiàn)函數(shù),.c或.cpp中調(diào)用函數(shù) 、#ifdef...#else...#endif(#ifdef __cplusplus...#else...#endif) 、 防止重定義頭文件#ifndef...#define...#endif#define 與創(chuàng)建動(dòng)態(tài)庫(kù)DLL不同點(diǎn):__declspec(dllexport)不是必須的(是可有可無),但是在創(chuàng)建DLL時(shí)該關(guān)鍵字是必須的。=========================================================================================== 【使用靜態(tài)庫(kù)LIB.lib】 將上面生成的LIB.lib和LIB.h文件拷貝到新建工程項(xiàng)目的目錄下,并且添加下面代碼://main.c調(diào)用LIB.lib中的2個(gè)函數(shù) #include "LIB.h"#pragma comment(lib,"LIB.lib")int main() {printf("add(1,2) = %d\n",add(1,2));show();getchar(); }--------------------------------------------------------- //main.cpp調(diào)用LIB.lib中的2個(gè)函數(shù)#include "LIB.h" #pragma comment(lib,"LIB.lib")int main() {cout<<"add(1,2) = "<<add(1,2)<<endl;show();getchar(); } 【仔細(xì)一點(diǎn)你會(huì)發(fā)現(xiàn):在main.c和main.cpp代碼中輸出部分有微小差別】因?yàn)閙ain.c文件中沒有cout、endl等關(guān)鍵字,所以我們用stdio.h里邊的關(guān)鍵字printf進(jìn)行輸出。

總結(jié)

以上是生活随笔為你收集整理的第五天2017/04/06(下午3:静态链接库(Lib))的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。