Dev C++开发lib和dll
生活随笔
收集整理的這篇文章主要介紹了
Dev C++开发lib和dll
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面通過例子簡單介紹dev c++ 是如何開發lib和dll并使用的。關于dev c++ 我使用的版本是5.11,單擊下載:
一、創建項目結構(文件夾)
為了使整個項目例子看起來比較易于管理,下面我們在D盤創建文件夾d:/gcc,在gcc文件夾里我們分別創建include和lib、dll文件夾。
運行:cmd
分別執行下面命令:
>d:
>mkdir gcc
>cd gcc
>mkdir include,lib,dll
如下圖示:
二、創建lib項目(Dev C++制作)
打開Dev C++,打開File——>New——>Project,如下圖示:
創建lib項目,并保持在d:/gcc/lib文件夾里。
可以看到d:/gcc/lib下有
myMath.dev文件是Dev C++管理項目的文件,是目錄管理配置文件。
1)我們創建一個add.c文件,存儲在lib里
#includeint add(int a,int b){return a + b; }2)創建myMath.h文件,存儲在include里
extern int add(int a,int b); 3)編譯后,在lib下看到了兩個文件 .o文件是目標文件 .a文件就是lib文件 如下:三、創建一個測試項目
創建test項目如下:
1)創建一個main.c文件如下:
#include #include #includeint main(int argc, char *argv[]) {printf("%d",add(2,2));return 0; } 可以看到,在main.c源代碼里用到了函數add,還導入了myMath.h頭文件。 2)添加項目設置 如果不做這一步,編譯會找不到add函數,所以這一要設置項目選項,添加myMath.h和add.a 如下:3)編譯運行
四、創建dll項目
1)創建dll 打開Dev C++,創建dll項目,如下:創建后就有兩個文件:dll.h和dllmain.c,dll.h文件就是說明文件,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文件,生成的文件以項目名稱命名,為myString.dll。編譯的時候會有警告,如下:
這個警告就是說沒有調用dll的應用程序。而且給出了添加的方法,在Execute——>Paremeters指定。我們指定以上創建的test工程的main.c函數作為調用myString.dll的調用程序,再次編譯就不會有這個警告了。如下設置:
編譯后可以在dll的工程下看到如下:
其中myString就是我們要用的dll(動態鏈接庫)。 2)使用dll 在test工程中的main.c里這樣來使用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的路徑,所以配置如下:
因為我們設置include是在D:\gcc\include下,所以講dll.h復制進去。 然后再編譯的時候clean一下,Execute——>clean。 3)只編譯通過,看到生成test.exe 4)運行 雙擊test.exe出錯,
找不到myString.dll,這時我們將myString.dll拷貝到test.exe同級目錄下,雙擊執行如下:
這里有個問題需要思考: 為什么編譯的時候需要明確制定dll路徑,而執行的時候就沒有找到此路徑呢?
五、例子下載
下載六、a(lib)和dll的區別
在d盤隨便新建一個文件,比如a,分別將myMath.a和myString.dll和test.exe拷貝到a文件夾里,雙擊執行test.exe,發現能執行。 將myMath.a刪掉,再雙擊test.exe,發現還能執行。 再將myString.dll刪掉,雙擊test.exe,發現報錯說明.a文件是編譯后就已經在exe中,而dll中的函數不在exe中,需要執行exe時動態找到被執行。這就是.a和dll的區別。 .a稱為靜態庫 dll稱為動態鏈接庫。
總結
以上是生活随笔為你收集整理的Dev C++开发lib和dll的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021.3.14学习随笔
- 下一篇: LeetCode 134. 加油站(C+