1.改变项目 动态库、静态库属性。 2.使用运行库 /MD、/MT、/LD说明
有关 C 运行库以及使用 /clr(公共语言运行时编译) 进行编译时要使用哪些库的更多信息,请参见 CRT 库功能。
传递给链接器的给定调用的所有模块都必须使用相同的运行库编译器选项(/MD、/MT、/LD)进行编译。
有关如何使用运行库的调试版本的更多信息,请参见C 运行时库参考。
知识库文章 Q140584 也讨论如何选择适当的 C 运行库。
有关 DLL 的更多信息,请参见 Visual C++ 中的 DLL。
在 Visual Studio 开发环境中设置此编译器选项
打开项目的“属性页”对话框。 有关详细信息,请参见如何:打开项目属性页。
展开“C/C++”文件夹。
选择“代码生成”属性页。
修改“运行库”属性。
以编程方式设置此编译器选项
请参见RuntimeLibrary。
若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档。
动态链接库 (DLL) 是作为函数和资源的共享库的可执行文件。 动态链接可使执行文件调用函数或使用存储在单独文件中的资源。
可从使用这些函数和资源的可执行文件中对其分别进行编译和部署。 操作系统可在已加载可执行文件时或在运行时按需将 DLL 加载到可执行的内存空间中。
DLL 还可以在可执行文件之间轻松共享函数和资源。 多个应用程序可同时访问内存中单个 DLL 副本的内容。
静态链接会将 .lib 文件中所有对象代码复制到可执行文件中。 动态链接仅包括在运行时用于查找和加载含有数据项或函数的 DLL 所需的信息。
在创建 DLL 时,还会创建一个包含此信息的 .lib 文件。 生成调用 DLL 的可执行文件时,链接器会使用 .lib 文件中的导出符号来为加载程序存储此信息。
当加载程序加载 DLL 时,该 DLL 会映射到你的可执行文件的内存空间中。 将调用 DLL 中的特殊函数 DllMain 来执行 DLL 要求的任何初始化。
使用动态链接代替静态链接有若干优点。 当使用 DLL 时,可以节省内存空间,并减少交换操作。 当多个应用程序可以使用 DLL 的单个副本时,可以节省磁盘空间和下载带宽。
DLL 可单独部署和更新,这可以使你在无需重新生成和发布所有代码的情况下,提供售后支持和软件更新。 DLL 是一种提供特定区域资源的简便方法,可以支持多语言程序,并简化创建国际版本应用程序的过程。
下列主题提供有关如何编程 DLL 的详细信息。
本节内容
演练:创建和使用动态链接库 (C++)
介绍如何使用 Visual Studio 创建和使用 DLL。
应用程序和 DLL 之间的区别
描述应用程序和 DLL 之间的基本区别。
使用 DLL 的优点
描述动态链接的优点。
DLL 的类型
提供有关可生成的不同类型的 DLL 的信息。
DLL 常见问题
提供有关 DLL 的常见问题解答。
将可执行文件链接到 DLL
描述与 DLL 的显式链接和隐式链接。
初始化 DLL
讨论当 DLL 加载时必须执行的 DLL 初始化代码(如分配内存)。
运行库行为
描述运行库如何执行 DLL 启动序列。
LoadLibrary 和 AfxLoadLibrary
讨论如何在运行时使用 LoadLibrary 和 AfxLoadLibrary 显式链接到 DLL。
GetProcAddress
讨论如何使用 GetProcAddress 获取 DLL 中导出函数的地址。
FreeLibrary 和 AfxFreeLibrary
讨论当不再需要 DLL 模块时如何使用 FreeLibrary 和 AfxFreeLibrary。
Windows 用来定位 DLL 的搜索路径
描述 Windows 操作系统用来定位系统上的 DLL 的搜索路径。
动态链接到 MFC 的规则 DLL 的模块状态
描述动态链接到 MFC 的规则 DLL 的模块状态。
扩展 DLL
解释通常实现从现有 Microsoft 基础类库类派生的可重用类的 DLL。
创建纯资源 DLL
讨论只包含资源(如图标、位图、字符串和对话框等)的纯资源 DLL。
MFC 应用程序中已本地化的资源:附属 DLL
提供对附属 DLL 的增强支持,该功能有助于创建针对多种语言进行本地化的应用程序。
导入和导出
描述如何将公共符号导入应用程序或从 DLL 导出函数。
Active 技术和 DLL
使对象服务器得以在 DLL 内实现。
DLL 中的自动化
描述“MFC DLL 向导”中的“自动化”选项提供的内容。
MFC DLL 命名约定
讨论 MFC 中包含的 DLL 和库如何遵循结构化命名约定。
从 Visual Basic 应用程序调用 DLL 函数
描述如何从 Visual Basic 应用程序中调用 DLL 函数。
相关章节
将 MFC 作为 DLL 的一部分使用
描述使你可以将 MFC 库作为 Windows 动态链接库的一部分来使用的规则 DLL。
MFC 的 DLL 版本
描述如何将 MFCxx.dll 和 MFCxxD.dll(其中 x 是 MFC 版本号)共享动态链接库用于 MFC 应用程序和扩展 DLL。
(NOTINBUILD)Visual C++ Programming Methodologies
提供描述有关 Visual C++ 库的概念信息和讨论各种编码技术和方法的主题的链接。
项目生成动态库
项目生成静态库
修改 目标计算机属性 x86 x64 ARM etc...
修改默认指令集
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug
属性1. 在工程上右键->属性->c/c++->代码生成->运行库
四个选项及含义分别如下:
1.1 /MDd:MD_DynamicDebug,我理解是 “共享DLL中使用MFC” 时的 Debug
1.2 /MD:MD_DynamicRelease,我理解是 “共享DLL中使用MFC” 时的 Release
1.3 /MT:MD_StaticRelease,我理解是 “在静态库中使用MFC” 时的 Debug
1.4 /MTd:MD_StaticDebug,我理解是 “在静态库中使用MFC” 时的 Release
属性2. 在工程上右键->属性->配置属性-->常规-->MFC的使用
2.1 其中两个选项如下:
2.2 在共享DLL中使用MFC
2.3 在静态库中使用MFC
属性3. 我们有两种编译模式,一种是Release,一种是Debug。
问题来了:
VisualStudio报错:error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug
翻译:这句的意思是 检测到 “运行库” 的不匹配项:值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug
人话:………………………… 属性1……………………… 属性1.4…………………………属性1.1
解决:能够看出来是Debug时的 属性1 和 属性2 不匹配,那要么将 属性1设置为 /MDd,要么将 属性2 设置为 在静态库中使用MFC。
反正编译模式(属性3)、MFC的使用(属性2)、运行库(属性3)要三位一体对应起来。
1.改变项目 动态库、静态库属性。 2.使用运行库 /MD、/MT、/LD说明的更多相关文章
- C和C++运行库
一.Windows下动态库 1. 静态函数库 这类库的名字一般是libxxx.lib:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后 ...
- [转帖]你所不知道的C和C++运行库
[C-C++]你所不知道的C和C++运行库 https://blog.csdn.net/humanking7/article/details/85887884 原作者也是转的blog 最近一个物理机上 ...
- 你所不知道的C和C++运行库 标签: vc 2017-05-26 10:33 41人阅读 评论(0) 收藏
在使用vs2013调用vc2005编译出的dll时出现错误,遂将源程序用vs2013编译出dll,再用vs2013调用错误消失,不解.寻找原因时有人说"VC库版本不一样",故查找C ...
- c运行库、c标准库、windows API的区别和联系
C运行时库函数C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的. API函数API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函数实现的 ...
- (转)c运行库、c标准库、windows API的区别和联系
C运行时库函数C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的. API函数API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函数实现的 ...
- phpstudy 出现“请自行检查是否安装VC9运行库??”问题 -- 缺少vc9库
phpStudy是一款PHP调试环境的程序集成包,该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便.好用的 ...
- phpStudy启动失败时的解决方法 提示缺vc9运行库
问题描述: 问题产生原因分析: php5.3.5.4和apache都是用vc9编译,电脑必须安装vc9运行库才能运行. php5.5.5.6是vc11编译,如用php5.5.5.6必须安装vc11运行 ...
- LabVIEW:可执行文件运行缺少运行库问题
造冰箱的大熊猫@cnblogs 2018/5/11 上周调试设备网口犯了一个低级错误,今天又搞出一个笑话 目标机上没有LabVIEW开发环境,于是在开发机上将VI打包成可执行程序.在目标机上运行可执行 ...
- 请自行检查是否安装VC9运行库??
phpStudy是一款PHP调试环境的程序集成包,该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便.好用的 ...
随机推荐
- linux lamp
1. 用yum安装Apache,Mysql,PHP. 1.1安装Apache yum install httpd httpd-devel 安装完成后,用/etc/init.d/httpd start ...
- C#中的let字句应用示例
一.应用场景 在查询表达式中,存储子表达式的结果有时很有用,这样可以在随后的子句中使用. 可以使用 let 关键字完成这一工作,该关键字可以创建一个新的范围变量,并且用您提供的表达式的结果初始化该变量 ...
- IOS - unity3d错误Could not produce class with ID
运行环境 Unity 5.3.5f1 (IL2CPP)编译IOS版本 XCode Version 7.2.1 (7C1002) Mac OS X 10.11.3 (15D21) (Mac mini) ...
- 搭建sftp服务+nginx代理
在公司,经常会用到sftp服务,比如两个公司对接生产项目,其中一方,要在sftp上上传pdf文件,另一方公司要在sftp服务器上用nginx代理直接下载pdf文件.下面就说说我在实际中应用到的sftp ...
- python之Matplotlib 和Numpy
1.matplotlib http://www.cnblogs.com/TensorSense/p/6802280.html https://wenku.baidu.com/view/e1c15c9d ...
- 数据结构---python---表
一.list的基本实现技术 在数据结构中,如果用python实现线性表,无疑要提到list,list是一种元素个数可变的线性表(而tuple是不变的表,不支持改变其内部状态的任何操作,其他与list性 ...
- 九度OJ 1038:Sum of Factorials(阶乘的和) (DP、递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1845 解决:780 题目描述: John von Neumann, b. Dec. 28, 1903, d. Feb. 8, 1957, ...
- UVA 11077 - Find the Permutations(递推)
UVA 11077 - Find the Permutations option=com_onlinejudge&Itemid=8&page=show_problem&cate ...
- WordPress用户角色及其权限管理编辑插件:User Role Editor汉化版
如果Wordpress默认的用户角色及权限不能满足您的需求,又觉得修改代码编辑用户权限太麻烦.那不妨试试User Role Editor,Wordpress用户角色及其权限管理编辑插件. User R ...
- css 改变图片灰度颜色
我一直喜欢灰度图像因为我认为他们看起来更有艺术感.很多图片编辑如Photoshop很容易把你的彩色图像变成灰度.甚至有选择调整颜色深度和色调.不幸的是,这样的效果想做在网络上并不容易,因为浏览器有差异 ...