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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

Dev C++开发lib和dll

發(fā)布時(shí)間:2024/1/8 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)題。

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