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里

#include
   
   
    
    
int 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 
    
    
     
     
#include
     
     
      
       
int 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)
#endif

DLLIMPORT 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
      
      
       
        
#include
       
       
        
         
int 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称为动态链接库。






评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi竹子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值