第三方库的相关这个"/>
.dll、.lib、.h的生成导出和调用其他第三方库的相关这个
动态库相关的使用
目录
动态库相关的使用
1.选择生成.dll项目文件;
2.编写自己的多个.h和.cpp文件, 当功能函数,或者所需要的接口或者类都给完成了之后,选择生成(而不是点击调试运行 Crtl+F5)
3.将生成的*.dll和*.lib文件都直接导出到自定义的指定目录
4.VS 生成*.exe文件到指定目录
5.包含指定的.h和.lib文件夹,方便使用和调用。
5.1.添加头文件方法:
5.2.添加lib的两种方法:
6.修改项目B生成的*.exe修改其导出路径
7.生成和运行相关.exe
8.环境配置成功。
9:注意和总结
10.源码参考链接:
分割,下面作为补充的扩展知识
参考博文:
直看简洁版本:
这一篇文章解决了哪些问题?
VS2015设置DLL和LIB的输出目录
vs2015 项目生成后如何自动把生成的EXE,DLL复制到指定文件夹中
VS 复制生成文件到指定目录
Visual Studio修改可执行程序的文件名和路径
vs项目中头文件(.h)静态库(.lib)和 动态库(.dll )的路径和配置
知识点:解决方案下的工程项目的使用,
生成一个文件夹结构,方便团队协同运行合作,类似于格式规范吧?
eg:
选用VS2015 为例子,写一个小的记录。
以一个具体节解决方案实现(其中包含有项目A项目B)
//-------------------------------------------------------------------------------------------------------
对生成*.dll的项目A的操作。
A项目经过运行生成之后,提供“*.dll *.lib *.h”给项目B调用。
1.选择生成.dll项目文件;
2.编写自己的多个.h和.cpp文件, 当功能函数,或者所需要的接口或者类都给完成了之后,选择生成(而不是点击调试运行 Crtl+F5)
VS2015设置DLL和LIB的输出目录
3.将生成的*.dll和*.lib文件都直接导出到自定义的指定目录
DLL设置输出目录
工程点击右键–>属性–>链接器–>常规–>输出文件
工程点击右键Configuration Properties–>Linker–>General–>Output File
默认设置,一般为:$(OutDir)$(TargetName)$(TargetExt)
相对路径的起点为xxx.vcxproj 文件所在的目录
lib设置输出目录
//-------------------------------------------------------------------------------------------------------
对(调用项目A提供的*.dll *.lib *.h的)B项目的操作。
4.VS 生成*.exe文件到指定目录
(注意:这里是指定到.dll的目录,因为.exe必须要有和.dll一起合并,才能够正确的运行)
右键B项目属性,运行如下,生成的.exe就到了DLL文件夹里面了
5.包含指定的.h和.lib文件夹,方便使用和调用。
在B项目中,添加其他人写好的工具包的头文件、静态库和动态库的方法总结如下:
头文件
5.1.添加头文件方法:
工程---属性---配置属性---c/c++---常规---附加包含目录(Additional Include Directories):加上头文件存放目录。
注意:(1)路径必须指向头文件所在的子文件夹,而不能直到父文件夹就结束(2)每个路径不需要加上双引号,输入了之后,vs会自动加上双引号,如果自己加可能vs无法识别双引号(3)如果是多个路径,路径直接用“;”隔开。(4)在使用代码处引用这个头文件,#include "xxx.h"
但是!但是!但是! 项目B(里面的.h .cpp 的里面)使用提供的头文件,
直接#include “xxx.h“ (而不用使用 #include ”绝对或者相对路径“)
5.2.添加lib的两种方法:
5.2.1静态库添加
添加方法:添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录(Additional Library Directory):加上lib文件存放目录。
然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项(Additional Dependencies):加上lib文件名。
5.2.2动态库的添加
把引用的dll放到工程的可执行文件所在的目录(DeBug文件夹)下,如不添加,编译连接不会报错,运行报错:无法找到***.dll文件。
原因:生成的.exe文件是(系统根据你的项目名称)指定的。但是使用第三方库的.dl需要和.exe放在一个文件夹目录下。才能最终生成运行的时候OK。
6.修改项目B生成的*.exe修改其导出路径
工程-属性-配置属性-链接器-输入-附加依赖项
../../../DLL/
7.生成和运行相关.exe
(注意:这里有一个大坑,就是如果你点击生成(不是运行调试),是会成功的;但是如果直接调试运行,点击Crtl+F5或者F5会显示 “xxxx./***.exe不是可运行的命令或者可执行程序”这种错误。) 原因是:前面修改了生成*.exe的路径,就自然不会在系统默认的路径出现了。所以调试的路径也需要修改)
解决方案:项目B点击 “属性-配置属性-调试-命令” 和 “属性-配置属性-调试-工作目录” 下面使用相对路径修改。
8.环境配置成功。
这会你写完之后,无论是生成,还是Crtl+F5都可以顺利的运行,感觉美滋滋。安逸的一笔。
将将两个小的测试解决方案,整个源码分享出来,若是不明白可以自行查看。(随便看哪一个都可以)
其中文件夹结构路径见最上面那个图(算了,我把那个图又再次搬运下来了)。
9:注意和总结
其中添加相对或者绝对路径时候。使用/或者\好像都可以,有两个都尝试了的。且有时候,比如 路径最后的是否还需要再加一个 "/"。多一份耐心和细心,多一份尝试,坑都是要一个一个的踩的。
10.源码参考链接:
动态链接库的生成与调用_2019_03_28.zip
===========================================
分割,下面作为补充的扩展知识
也可以简单点:
也可以不在上面那么复杂的配置项目B的属性N多设置:
直接在要是使用的头文件上面,加上项目A生成.dll和.lib的绝对路径,以及项目A下,相关的.h的据对路径。
//#include "D:/programming/c_programming/other/yayaya/yayaya/mydll.h"
//#pragma comment(lib, "D:/programming/c_programming/other/yayaya/Release/yayaya.lib")
外加 把.dll复制到B项目的生成的.exe文件夹下面也可以直接运行
(根据多篇博客提供,是有多种设置方式的。这一种设置方式没有试过,应该也是可以的)
参考博文:
感谢热心网友的不吝啬分享,遂写成整理,共分享之:
===================================================================================
直看简洁版本:
||==========================================================================||
|| ######################################### ||
|| ## 项目A(导出.dll的那一个) ## ||
|| ######################################### ||
|| ||
|| ||
||//######################################### ||
||*.lib导出路径: ||
||属性-链接器-常规-输出文件 ||
||../../../../bin64/ ||
|| ||
||//######################################### ||
||*.lib导入路径: ||
||属性-链接器-高级-导入库 ||
||../../../../bin64/$(TargetName).lib ||
|| ||
|| ||
||//######################################### ||
||*.dll导出路径: ||
||常规-输出目录 ||
||../../../DLL/$(TargetName)$(TargetExt) ||
|| ||
|| ||
||==========================================================================||
|| ########################################### ||
|| ## 项目B(调用.dll的那一个) ## ||
|| ########################################### ||
|| ||
|| ||
||//######################################### ||
||*.h文件夹导入 ||
||工程-属性-配置属性-c/c++-常规-附加包含目录 ||
||../../../../include/ ||
|| ||
|| ||
||//######################################### ||
||*.lib文件夹导入 ||
||工程-属性-配置属性-链接器-常规-附加库目录 ||
||../../../../bin64/ ||
|| ||
||//######################################### ||
||具体的*.lib导入 ||
||工程-属性-配置属性-链接器-输入-附加依赖项 ||
||项目A名称.lib ||
|| ||
||//######################################### ||
||项目B生成的*.exe修改其导出路径 ||
||工程-属性-配置属性-链接器-输入-附加依赖项 ||
||../../../DLL/ ||
|| ||
|| ||
||==========================================================================||
|| ########################################### ||
|| # 项目B(修改*.exe输出路径和调试运行路径)# ||
|| ########################################### ||
|| ||
||//######################################### ||
||*.exe修改其导出路径 ||
||属性-配置属性-调试-工作目录 ||
||D:\programming\c_programming\dascode\projects\DLL\ ||
|| ||
||//######################################### ||
||调试Crtl+F5调试运行,用绝对路径修改 ||
||属性-配置属性-调试-命令 ||
||D:\programming\c_programming\dascode\projects\DLL\$(TargetFileName) ||
||前面那个存放.dll的文件夹的绝对路径\$(TargetFileName) ||
|| ||
|| ||
||==========================================================================||
更多推荐
.dll、.lib、.h的生成导出和调用其他第三方库的相关这个
发布评论