最近需要将rtklib的一些功能提取出来,生成动态链接供其他程序调用;
参考资料
调试动态链接库(DLL)http://www.tuicool.com/articles/aQfmIb
利用VS生成.lib及.dll文件http://wangzi6147.github.io/2015/05/05/DLL.html
1)lib文件与.dll文件
.lib文件称作静态链接库,.dll文件称作动态链接库。linux系统下对应的文件为.a文件及.so文件。
Windows平台下c++程序与库的链接有两种方式:静态链接与动态链接。
静态链接只需要.lib文件,此时.lib文件作为静态链接库。打包好的程序只有.exe文件,文件体积较大。
动态链接需要.lib及.dll文件,此时.dll文件作为动态链接库,而.lib文件作为库的入口,被打包到.exe文件中。此时打包好的程序包括.exe文件及.dll文件。
比较这两种方式,显然动态链接更灵活。如果发布的程序需要更新库里的内容,只需要更新对应的dll文件即可,而对其他文件不需要做修改。相反静态链接方式需要更新整个.exe程序,而且会使得.exe文件体积庞大。
2)如何利用VS2013生成.lib及.dll文件
这里以VS2013为例,生成动态链接库。
a、首先创建一个DLL工程:
#ifdef DLL_API
#else
#define DLL_API __declspec(dllexport)
#endif
// 这里以加法为例,其中DLL_API代表可供调用者调用的函数
DLL_API int add(int a, int b);
#include "dll_test.h"
int add(int a, int b)
{
return a + b;
}
其中.lib文件及.dll文件就是我们打包好的库文件。如果其他工程要调用这个库,需要做的是:
1.工程包含dll_test.h头文件;
2.工程包含.lib链接库,作为动态链接库的入口;
3.将.dll文件与生成的.exe文件放在同一目录下,或者将.dll文件所在目录添加到系统环境变量中并重启计算机。
d、几点注意
上面的例子只生成了Debug版本的库文件,如需Release版本,需要重新在Release模式下生成一次。
默认的工程依赖VS环境,如果在没有VS环境机器上不能直接运行。解决办法是工程右键-属性-C/C++-代码生成-运行库,改为/MT(Release)或者/MTd(Debug)
如果生成的库依赖其他动态链接库,需要把依赖的.dll文件一同打包发布。
3)调试DLL
我们在编写程序的过程中,调试是必不可少的步骤,使用vs所带的调试器,即强大也好用,但是对于一般的exe程序,项目中通常只有一个主程序,也就是我们编写的,这样的程序可以具有自己独立的虚拟地址空间,可以独立运行,那么我们在代码中加入断点,调试运行的时候,当运行到断点处的时候,程序就会停止在代码处。通过调试,一方面我们可以知道程序执行的顺序,另一方面可以发现内存存取的错误,或是参数不对等造成的错误,帮助我们及时的纠正,但是对于动态链接库,DLL,它也是一个可执行程序,但是它没有自己独立的虚拟地址空间,在运行的时候,是吧自己的地址映射到exe的虚拟地址空间中,进行执行调用。既然,他不能直接执行,那么如果我们建立一个DLL工程,建立一个DLL项目,又如何才可以加入断点,调试运行呢?下面我就结合实例讲述一下如何调试DLL。
DLL不能单独的执行,所以我们必须要建立一个可执行程序项目,通过这个项目来调用我们编写DLL。一般情况下,如果我们是先编写了DLL项目,那么我就可以再在这个项目解决方案中添加一个新建项目,添加一个新建项目的过程和我们建立普通项目是一样,不一样的是,平时我们利用向导建立项目的时候,只有一个解决方案,一个解决方案中只有一个项目,而在这里是一个解决方案中两个项目;如果我们是先编写了一个可执行程序,也可以通过上面说的方法,在现有的解决方案中添加一个新的项目,建立一个DLL项目。不管如何做,就是要让DLL项目和测试DLL的可执行程序在同一个解决方案中。如下图:
使用默认生成一个新项目。
其中test是测试DLL的程序,dll_test是DLL程序
接着我们要在测试dll的程序中引用dll程序,也就是引用dll_test项目,在test项目上(上图)点右键,选择引用菜单项。得到如下图显示:
完成上面的设置,可以进行DLL的调试了,如下:
假如最后编译没有错,运行时候出现找不到dll文件,那就把上面生成的dll文件放到工程根目录的debug目录下面就可以啦!
https://blog.sciencenet.cn/blog-858128-992020.html
上一篇:GMT绘制GPS速度场
下一篇:DLL显式调用与TCP传输结构体
到此这篇vs怎么调试dll(vs怎么调试代码)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/54507.html