第五天2017/04/06(下午3:静态链接库(Lib))
生活随笔
收集整理的這篇文章主要介紹了
第五天2017/04/06(下午3:静态链接库(Lib))
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文鏈接:http://blog.csdn.net/xiaoding133/article/details/8973436
一、靜態鏈接庫和動態鏈接庫
1.靜態鏈接庫(.LIB):函數和數據被編譯進一個二進制文件。發布時,只需要發布這個可執行文件,并不需要發布被使用的靜態庫。
2.動態庫(.DLL):在使用動態庫的時候,往往提供兩個文件:一個引入庫(.lib)文件和一個DLL(.dll)。雖然引入庫和靜態庫的后綴名相同,但是差別很大。對于一個DLL來說,其引入庫文件包含該DLL導出的函數和變量的符號名,而.dll文件包含DLL的實際的函數和數據。在使用動態鏈接庫的情況下,在編譯鏈接可執行文件時,只需要DLL的引入庫文件,而在運行可執行程序時,需要加載所需要的DLL,“發布產品時,需要發布調用的動態鏈接庫”。
二、靜態鏈接庫的創建和引用
【創建靜態庫】 //DLL.h頭文件聲明2個函數:一個在.cpp中實現,一個在.c中實現#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中實現add()函數 #include "LIB.h" int add(int a,int b) { #ifdef __cplusplusprintf("DLL生成使用成功:add()函數 —— C++編譯環境\n");return a+b; #elseprintf("DLL生成使用成功:add()函數 —— C編譯環境\n");return a+b; #endif } ------------------------------------------------------------------------------------------ //define_show.c中實現show()函數#include "LIB.h"void show() { #ifdef __cplusplusprintf("\nDLL生成使用成功:show()函數 —— C++編譯環境\n"); #elseprintf("\nDLL生成使用成功:show()函數 —— C編譯環境\n"); #endif }【注解】創建和調用LIB與DLL的相同點、不同點 與創建動態庫DLL相同點:可以實現C與C++的混合編程#ifdef __cplusplus extern "C"{#endif //函數的聲明 #ifdef __cplusplus }#endif 、創建LIB靜態庫時,在.h聲明函數,.c或.cpp中實現函數,.c或.cpp中調用函數 、#ifdef...#else...#endif(#ifdef __cplusplus...#else...#endif) 、 防止重定義頭文件#ifndef...#define...#endif 、 #define 與創建動態庫DLL不同點:__declspec(dllexport)不是必須的(是可有可無),但是在創建DLL時該關鍵字是必須的。=========================================================================================== 【使用靜態庫LIB.lib】 將上面生成的LIB.lib和LIB.h文件拷貝到新建工程項目的目錄下,并且添加下面代碼://main.c調用LIB.lib中的2個函數 #include "LIB.h"#pragma comment(lib,"LIB.lib")int main() {printf("add(1,2) = %d\n",add(1,2));show();getchar(); }--------------------------------------------------------- //main.cpp調用LIB.lib中的2個函數#include "LIB.h" #pragma comment(lib,"LIB.lib")int main() {cout<<"add(1,2) = "<<add(1,2)<<endl;show();getchar(); } 【仔細一點你會發現:在main.c和main.cpp代碼中輸出部分有微小差別】因為main.c文件中沒有cout、endl等關鍵字,所以我們用stdio.h里邊的關鍵字printf進行輸出。總結
以上是生活随笔為你收集整理的第五天2017/04/06(下午3:静态链接库(Lib))的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五天2017/04/06(下午1:C、
- 下一篇: 第五天2017/04/06(下午2:动态