Windows vs环境配置静态库和动态库的方法(/MD、/MT)
来源:互联网 发布:网络光纤收发器 编辑:程序博客网 时间:2024/06/06 15:42
对于VS环境,有很多小伙伴都迷惑于工程的配置。
在开发过程中,不知道如何去生成一个静态库或动态库,如何去使用静态库和动态库。
本文在讲述配置静态库和动态库的同时,会在工程中体现如何使用静态库和动态库。
需要下载工程的小伙伴请读到最后,有惊喜等着你。
先说说动态库和静态库
1.动态库和静态库的区别
静态库
#. 将库文件中的二进制代码直接链接到目标文件,程序运行时不再需要库
#. lib 中的指令都全部被直接包含在最终生成的目标文件中了
#. 静态链接库中不能再包含其他的动态链接库或者静态库
动态库
#. 将接口在库文件中的位置信息链接到目标文件,程序运行时再根据这些位置信息进行调用,因此运行时需要库文件
#. dll不必被包含在最终目标文件中,目标文件执行时可以“动态”地引用和卸载dll文件
#. 动态链接库中还可以再包含其他的动态或静态链接库
2.动态库和静态库的优缺点
静态库
#. 只需要编译的时候需要,运行的时候不需要,比较方便发布
#. 对于每个使用它的进程拷贝一份副本,如果进程很多,则对运行空间的要求比较高
#. 不方便程序增量更新,如果lib更新了,则所有用到lib的目标文件都需要更新
动态库
#. 运行时需要将目标文件与库文件同时发布
#. 所有进程共享一份,但这样会有DLL Hell的风险
#. 只需要更新dll库本身
下面直接奔主题,配置搞起
3.在vs环境下制作静态库和动态库
RefLibrary测试工程
#. 工程头文件定义RefLibraryDefine.h
#ifndef __REFLIBRARYDEFINE_H__#define __REFLIBRARYDEFINE_H__#ifndef REFLIBRARY_STATIC#ifdef REFLIBRARY_EXPORTS#define REFLIBRARY_API __declspec(dllexport)#else#define REFLIBRARY_API __declspec(dllimport)#endif#else#define REFLIBRARY_API#endif#endif // __REFLIBRARYDEFINE_H__
#. 导出头文件定义CalcFunc.h
#ifndef __CALCFUNC_H#define __CALCFUNC_H#include "RefLibraryDefine.h"#ifdef __cplusplusextern "C" {#endifREFLIBRARY_API int __cdecl Calc_Add(int x, int y);#ifdef __cplusplus};#endif#endif
4.配置方法(本文所讲的都是Debug下的配置)
#. 动态库调试版,依赖支持库目标文件名:RefLibraryD配置管理器:debug 运行库:MDd配置类型:动态库(.dll)生成文件:RefLibraryD.dll RefLibraryD.lib#. 静态库调试版,依赖支持库目标文件名:RefLibrarySD配置管理器:debug_S运行库:MTd配置类型:动态库(.dll)生成文件:RefLibrarySD.dll RefLibrarySD.lib#. 动态库调试版,依赖系统支持库目标文件名:RefLibrary_MTD配置管理器:debug_MT运行库:MDd配置类型:静态库(.lib)生成文件:RefLibrary_MTD.lib预处理器定义:REFLIBRARY_STATIC说明:当主程序使用这个库时,会把该库链接到目标EXE文件中,但还需要系统的运行库支持#. 静态库调试版,不依赖支持库目标文件名:RefLibrary_SMTD配置管理器:debug_SMT运行库:MTd配置类型:静态库(.lib)生成文件:RefLibrary_SMTD.lib预处理器定义:REFLIBRARY_STATIC说明:当主程序使用这个库时,会把系统的运行库链接到目标EXE文件中
总结:根据项目的需要,生成不同的目标文件,在升级程序中或在防止被杀软报毒时都可以用到,大家可以根据实际情况选择生成目标文件。
项目源码:https://github.com/seacn10/RefLibrary
阅读全文
0 0
- Windows vs环境配置静态库和动态库的方法(/MD、/MT)
- VS的ML、MT和MD
- vs环境MT/MD设置
- VS运行时库 /MD、/MDd 和 /MT、/MTd之间的区别
- 关于VS运行时库的选择(MDd,MD,MTd,MT,ML,MLD的使用)
- 运行时库ML\MT\MD的区分和优劣
- md /mdd /ml /mt/mtd vs运行库
- MD和MT的区别
- MT和MD的区别
- vs 运行时库的选择 md /mdd /ml /mt/mtd
- VS中MD/MT的设置
- VC中使用静态链接库 之 /MD /MT 用法
- VC运行库 (/MT /MD 等)
- VC使用动态库关于/MD与/MT的一个坑
- Windows静态库和动态库的调用方法汇总
- Windows静态库和动态库的调用方法汇总
- vs开发环境搭建(头文件,静态库,动态库配置)
- (四)静态库和动态库的生成和使用(windows(基于vs)和Linux(基于Ubuntu))
- python虚拟环境的搭建
- 今天在学C++的时候遇到的问题
- ServerBootstrap绑定和连接过程源码分析
- Softmax回归模型
- 日常写理解 今日谈对IO的理解~(转载)
- Windows vs环境配置静态库和动态库的方法(/MD、/MT)
- java进行opc连接之一Modbus slave 安装配置
- hadoop 单词个数及所处文件位置统计
- 如何设置自己的jupyter服务器的密码
- 不熟悉的HTML标签整理
- HashTable
- BMP格式详解
- Steam Roller UVALive
- Ubuntu14.04+Slam(模拟topic)