.dll、.lib、.h的生成导出和调用其他第三方库的相关这个

编程入门 行业动态 更新时间:2024-10-24 14:25:52

.dll、.lib、.h的生成导出和调用其他<a href=https://www.elefans.com/category/jswz/34/1770258.html style=第三方库的相关这个"/>

.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的生成导出和调用其他第三方库的相关这个

本文发布于:2024-03-23 01:29:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738862.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第三方   dll   lib

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!