| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> DLL和LIB编译以及问题 -> 正文阅读 |
|
[开发工具]DLL和LIB编译以及问题 |
引流? ? ? ? 运行时库错误、libcmt已定义、msvcrt已定义、LINK2005、无法找到符号 一、动态库DLL提供????????1、新建一个项目(任意项目,无论是控制台也好,空项目也罢)。 ????????2、项目属性-》常规-》项目默认值 设置为动态库。 ????????3、新增一个头文件,名字自定。写入如下方声明。以GetImphash 函数为例的一个声明。 ????????4、添加新建项-》代码-》模块定义文件(.def)写入库隐式链接名和函数名。 ????????5、设置属性-》连接器-》输入-》模块定义文件设置刚才的def文件(一般会自动设置)。 ????????6、增加cpp文件,包含3中头文件并实现该方法即可。
二、静态库编译? ? ? ? 一般而言,能将代码编译为静态库同样也能编译为静态库。只需将?项目属性-》常规-》项目默认值 设置为静态库,所以编译静态库先完成上述动态库设置。 ? ? ? ? ①如果原来在dll中存在依赖项(属性-》连接器-》输入-》附加依赖项),这里的依赖项的所在目录一般在此指定:属性-》连接器-》常规-》附加库目录 。此时编译lib也需要将依赖加入到lib的配置中。 ? ? ? ? ②务必注意,设置为dll和lib时其设置不共通,需要手动设置① 涉及的目录。操作为首先设置 属性-》常规-》项目默认值-》配置类型 更改为lib,此时属性页不会改变,需要点击确定或应用后属性页才会刷新。 ? ? ? ? ③在②? 设置后 即可对应①中的配置进行设置。附加依赖项在:属性页-》库管理器-》常规-》附加依赖项? ,而附加库目录在: 属性页-》库管理器-》常规-》附加库目录。将dll时的设置同样添加到这里 ? ? ? ? ④由于之前dll的头文件是用于声明导出的,在编译为静态库后则不再需要,因此在使用项目时需要去掉export的声明。 知识点汇总? ? ? ? 1、头文件声明使用宏实现在库项目和使用者项目函数的导入和导出的声明。即在库项目中export声明生效。在使用库的项目中import宏生效。 ? ? ? ? 2、def文件可以使导出函数名不附带参数与返回值的符号说明,干净易用 ? ? ? ? 3、dll动态库生成时同样会生成lib 文件,此时lib作用仅仅是隐式链接(很多缺少dll弹框则隐式链接,代码调用loadlibray自行编写则为显示)。 ? ? ? ? 4、库编译为lib时,如dll依赖A.lib和 B.lib。则lib依然依赖他们,在编译后的目标lib中将包含A.lib和 B.lib的代码,之后的使用者只链接改库lib无需再链接A.lib和 B.lib。 ? ? ? ? 5、无论编译为LIB还是DLL,其运行时库尽量统一,这在编译为LIB或者程序兼容方面有莫大的帮助。运行时库的查看选择:属性-》c++-》代码生成-》运行库。对应关系为
? ? ? ?如果在程序中引入上述的 md系列运行时库,那在使用者未安装vc运行库时则无法正常运行,出现类似如下的错误 。 ? ? ? ? 6、从上述中可以发现,如果我们混用mt md且先不谈他们会出现符号重定义问题,而且也会集合两个的缺点,让程序变得混乱,既是增加了依赖还让程序臃肿不堪。因此尽量保证一个dll或lib的运行时和他的所有依赖项都一致。 ? ? ? ? 7、最后的编译时的平台工具集或SDK版本不同会导致链接错误,因此需要在相同的平台工具集和SDK版本下编译。有的平台工具集无法选择SDK(较老的如vs 2010工具集) ? ? ? ? 8、使用LIB有时候死活无法解析外部符号,可以注意看函数声明的头文件关于 import字段的声明宏处理,有的需要在使用者的预编译定义加入一些宏。保证使用静态lib时候的声明无import字样。 ? ? ? ? 9、接上条,出现死活识别不了的可能是未定义 def或者 def中声明不正确。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/13 15:02:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |