Dev C++开发lib和dll
生活随笔
收集整理的這篇文章主要介紹了
Dev C++开发lib和dll
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
下面通過(guò)例子簡(jiǎn)單介紹dev c++ 是如何開(kāi)發(fā)lib和dll并使用的。關(guān)于dev c++ 我使用的版本是5.11,單擊下載:
一、創(chuàng)建項(xiàng)目結(jié)構(gòu)(文件夾)
為了使整個(gè)項(xiàng)目例子看起來(lái)比較易于管理,下面我們?cè)贒盤創(chuàng)建文件夾d:/gcc,在gcc文件夾里我們分別創(chuàng)建include和lib、dll文件夾。
運(yùn)行:cmd
分別執(zhí)行下面命令:
>d:
>mkdir gcc
>cd gcc
>mkdir include,lib,dll
如下圖示:
二、創(chuàng)建lib項(xiàng)目(Dev C++制作)
打開(kāi)Dev C++,打開(kāi)File——>New——>Project,如下圖示:
創(chuàng)建lib項(xiàng)目,并保持在d:/gcc/lib文件夾里。
可以看到d:/gcc/lib下有
myMath.dev文件是Dev C++管理項(xiàng)目的文件,是目錄管理配置文件。
1)我們創(chuàng)建一個(gè)add.c文件,存儲(chǔ)在lib里
#includeint add(int a,int b){return a + b; }2)創(chuàng)建myMath.h文件,存儲(chǔ)在include里
extern int add(int a,int b); 3)編譯后,在lib下看到了兩個(gè)文件 .o文件是目標(biāo)文件 .a文件就是lib文件 如下:三、創(chuàng)建一個(gè)測(cè)試項(xiàng)目
創(chuàng)建test項(xiàng)目如下:
1)創(chuàng)建一個(gè)main.c文件如下:
#include #include #includeint main(int argc, char *argv[]) {printf("%d",add(2,2));return 0; } 可以看到,在main.c源代碼里用到了函數(shù)add,還導(dǎo)入了myMath.h頭文件。 2)添加項(xiàng)目設(shè)置 如果不做這一步,編譯會(huì)找不到add函數(shù),所以這一要設(shè)置項(xiàng)目選項(xiàng),添加myMath.h和add.a 如下:3)編譯運(yùn)行
四、創(chuàng)建dll項(xiàng)目
1)創(chuàng)建dll 打開(kāi)Dev C++,創(chuàng)建dll項(xiàng)目,如下:創(chuàng)建后就有兩個(gè)文件:dll.h和dllmain.c,dll.h文件就是說(shuō)明文件,dllmain.c是源程序文件,其中我們刪去多余的代碼,如下: #ifndef _DLL_H_ #define _DLL_H_#if BUILDING_DLL #define DLLIMPORT __declspec(dllexport) #else #define DLLIMPORT __declspec(dllimport) #endifDLLIMPORT void HelloWorld();#endif /* Replace "dll.h" with the name of your header */ #include "dll.h" #include "stdio.h" #include DLLIMPORT void HelloWorld() {printf("hello world\n"); } 編譯生成dll文件,生成的文件以項(xiàng)目名稱命名,為myString.dll。編譯的時(shí)候會(huì)有警告,如下:
這個(gè)警告就是說(shuō)沒(méi)有調(diào)用dll的應(yīng)用程序。而且給出了添加的方法,在Execute——>Paremeters指定。我們指定以上創(chuàng)建的test工程的main.c函數(shù)作為調(diào)用myString.dll的調(diào)用程序,再次編譯就不會(huì)有這個(gè)警告了。如下設(shè)置:
編譯后可以在dll的工程下看到如下:
其中myString就是我們要用的dll(動(dòng)態(tài)鏈接庫(kù))。 2)使用dll 在test工程中的main.c里這樣來(lái)使用myString.dll,如下: #include #include #include#includeint main(int argc, char *argv[]) {printf("%d\n",add(2,2));HelloWorld();getchar();return 0; } 從以上代碼中看到有#include<dll.h>,所以要指定#include<dll.h>的路徑和dll的路徑,所以配置如下:
因?yàn)槲覀冊(cè)O(shè)置include是在D:\gcc\include下,所以講dll.h復(fù)制進(jìn)去。 然后再編譯的時(shí)候clean一下,Execute——>clean。 3)只編譯通過(guò),看到生成test.exe 4)運(yùn)行 雙擊test.exe出錯(cuò),
找不到myString.dll,這時(shí)我們將myString.dll拷貝到test.exe同級(jí)目錄下,雙擊執(zhí)行如下:
這里有個(gè)問(wèn)題需要思考: 為什么編譯的時(shí)候需要明確制定dll路徑,而執(zhí)行的時(shí)候就沒(méi)有找到此路徑呢?
五、例子下載
下載六、a(lib)和dll的區(qū)別
在d盤隨便新建一個(gè)文件,比如a,分別將myMath.a和myString.dll和test.exe拷貝到a文件夾里,雙擊執(zhí)行test.exe,發(fā)現(xiàn)能執(zhí)行。 將myMath.a刪掉,再雙擊test.exe,發(fā)現(xiàn)還能執(zhí)行。 再將myString.dll刪掉,雙擊test.exe,發(fā)現(xiàn)報(bào)錯(cuò)說(shuō)明.a文件是編譯后就已經(jīng)在exe中,而dll中的函數(shù)不在exe中,需要執(zhí)行exe時(shí)動(dòng)態(tài)找到被執(zhí)行。這就是.a和dll的區(qū)別。 .a稱為靜態(tài)庫(kù) dll稱為動(dòng)態(tài)鏈接庫(kù)。
總結(jié)
以上是生活随笔為你收集整理的Dev C++开发lib和dll的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021.3.14学习随笔
- 下一篇: LeetCode 134. 加油站(C+