-
2016-07-07 09:11:36相对动态库来说,静态库更简单,但也有些要注意的小细节:
一、
静态库链接的时候,VS有警告
warning LNK4006: __NULL_IMPORT_DESCRIPTOR already defined
这是因为对静态库而言,不需要添加任何依赖的动态库,依赖是由编译链接该静态库的EXE/DLL去负责的。
二、
静态库的函数和类的导出,都不需要像动态库那样加__declspec( dllexport )。如果加了__declspec(dllexport),VS反而在链接的时候提示: error LNK2019: 无法解析的外部符号(unresolved external symbol...)
三、
同一个Solution里,如果要使用到一个静态库,通过设置项目依赖即可,可以不用在项目的输入库中指定。
四、
静态库使用的是链接该静态库的 EXE/DLL 的资源。所以如果静态库里存放的对话框类,对话框资源还是需要加到 EXE/DLL 中。更多相关内容 -
MFC 静态库中使用MFC, /MT /MTD Libcurl例程,内含libcurl静态库
2018-10-06 11:23:14自己编译的lib库,及例程,下载后可直接编译运行; 此lib不适用于控制台程序; 是专门为MFC编译的;有问题直接给我留言; -
opencv3.3.0使用 MFC VS2015 静态库,简单显示图片和人脸识别
2020-12-14 20:33:26opencv3.3.0使用 MFC VS2015 静态库,简单显示图片和人脸识别,适用初学者,内有详细调用例子,已经编译好的opencv静态库 -
MFC 在静态库中使用MFC,静态多线程 兼容更多windows版本避免提示缺少很多dll,安装运行库 Visual C++ ...
2022-03-04 09:19:331.在静态库中使用MFC 2.选择MT Static MultiThread /MT 3.项目所有依赖的.dll也必须以这种方式编译 #include "jsoncpp/json.h" //#include 是以当前文件所在路径为当前目录 //#pragma comment(lib,...不管动态还是静态都有可能缺dll。最安全的是安装运行库:
Download Visual C++ Redistributable for Visual Studio 2015 from Official Microsoft Download Center
1.在静态库中使用MFC
静态编译文件大,
2.选择MT
Static MultiThread /MT
(1)、静态编译: debug状态下 – MTd; release状态下 – MT
(2)、动态编译: debug状态下 – MDd;release状态下 – MD
记住:静态编译为T 即Static ,动态编译为D 即Dynamic,debug下有个字母d,release下没有字母d,M即MultiThread3.项目所有依赖的.dll也必须以这种方式编译
#include "jsoncpp/json.h" //#include 是以当前文件所在路径为当前目录 //#pragma comment(lib,"jsoncpp/jsoncpp_static.lib") //#pragma comment 是以当前工程所在路径为当前目录 Dynamic Link (DLL) /MD #pragma comment(lib,"jsoncpp/jsoncpp_static_MT.lib") //#pragma comment 是以当前工程所在路径为当前目录 多线程静态MT
-
MFC Excel类封装成库DLL(在静态库中使用 MFC)
2020-01-09 11:13:50MFC Excel类封装成库DLL(在静态库中使用 MFC),将 Excel类打包成库文件,对外留几个接口,使用方便 -
Opencv在MFC静态库的配置
2014-06-09 22:44:52【3】在静态库下使用MFC和共享DLL下使用MFC 这两种情况 opencv的配置,以及配置opencv配置中容易出现的问题 http://blog.csdn.net/computer_liuyun/article/details/26978073 【4】opencv 在MFC中的使用有关问题...OpenCV[6]的配置一般是在共享动态链接库下的配置的,在静态库下的配置有点稍微区别:
(1)库目录需配置OpenCV的静态库
(2)设置MFC为静态链接
下面是把OpenCV之类的库设置成静态库
(3)最关键的一步是连接器的输入项设置:
nafxcw.lib //这个lib添加参考[5]
opencv_calib3d248.lib
opencv_contrib248.lib
opencv_core248.lib
opencv_features2d248.lib
opencv_flann248.lib
opencv_gpu248.lib
opencv_highgui248.lib
opencv_imgproc248.lib
opencv_legacy248.lib
opencv_ml248.lib
opencv_nonfree248.lib
opencv_objdetect248.lib
opencv_photo248.lib
opencv_stitching248.lib
opencv_ts248.lib
opencv_video248.lib
opencv_videostab248.lib
zlib.lib
IlmImf.lib
libjasper.lib
libjpeg.lib
libpng.lib
libtiff.lib //zlib.lib到libtiff也是OpenCV中staticlib文件夹下的lib,常常被人民所忽略。
vfw32.lib //这个lib添加参考[2,1]
comctl32.lib //参考[1]没有这个lib会产生opencv_highgui248.lib: error LNK2001: unresolved external symbol -Imp_createToolbarEx@52
如果照着[6]的配置静态链接就会产生下面的问题:
最后说一下[7],这个静态链接库,只要把.h和.lib文件加入工程文件夹即可。
而动态链接库有两种方法,一种是把.h、.lib和.dll文件加入到工程中,这就是我们经常配置[6]OpenCV的方法,也就是虽然是动态链接也需要配置.lib库的原因,.h文件路径是VC++ Directories下Include Directories下配置的,dll文件路径是在VC++ Directories下Executable Directories下配置的,或者更改环境变量path。还有一种方法是只单独使用dll文件,需要函数指针和WIN32 API函数装载,详情参考[7]。
同时#pragma comment( lib) 语句并不是静态链接,只能是工程是静态链接的,才会生成静态链接的。参考错误[8]
参考:
【1】OpenCV Unresolved External Symbols - Other Libraries Needed? http://stackoverflow.com/questions/8098272/opencv-unresolved-external-symbols-other-libraries-needed
【2】opencv highgui静态库在windows下链接问题 http://hi.baidu.com/jimmywood1987/item/a8f22612486897fddceecaa7
【3】在静态库下使用MFC和共享DLL下使用MFC 这两种情况 opencv的配置,以及配置opencv配置中容易出现的问题 http://blog.csdn.net/computer_liuyun/article/details/26978073
【4】opencv 在MFC中的使用有关问题 http://2.soadmin.com/kaifayuyan/cpp/498327.htm
【5】nafxcw.lib与LIBCMT.lib在vs2008中链接冲突解决方案 http://hi.baidu.com/dyqq1234/item/e124228c441b05814514cf2f
【6】VC 2008 Express下安装OpenCV2.3.1 http://wiki.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.3.1
【7】c++中.dll与.lib文件的生成与使用的详解 http://www.jb51.net/article/36447.htm
【8】LIB 静态链接库 http://www.cppblog.com/ivenher/articles/1310.html
-
MFC --静态库中使用MFC
2020-07-21 14:20:23静态库中使用MFC 前言 近期在VS2017中用MFC的工程写了一个小工具作为内部使用工具,生成的EXE文件给其他同事使用过程中出现“找不到dll”的问题。翻了翻资料,发现是编译的时选择静态还是动态编译导致的。在默认...静态库中使用MFC
前言
近期在VS2017中用MFC的工程写了一个小工具作为内部使用工具,生成的EXE文件给其他同事使用过程中出现“找不到dll”的问题。翻了翻资料,发现是编译的时选择静态还是动态编译导致的。在默认情况下,MFC的使用选项是“在共享DLL中使用MFC”(如下图),这个时候就需要将相关的DLL文件包和可执行程序一起打包,才能正常使用,但是这样用户体验就差了很多,所以释放的软件最好能是“静态库中使用MFC”,这样就减少了用户使用成本。
设置方法
- 工程-属性-配置属性-常规-MFC的使用-静态库中使用-应用(Debug和Release版本下面设置路径相同)
- 工程-属性-配置属性-C/C+±代码生成-运行库-多线程调试(/MTd)-应用(Debug版本)
- 工程-属性-配置属性-C/C+±代码生成-运行库-多线程调试(/MTd)-应用(Release版本)
总结
- MFC开发释放的最后版本最好为静态库中使用MFC的Release版本;
- 静态库中使用MFC先要选择MFC的使用选项,其次还要设置代码生成的选项;
- Release版本和Debug版本下的代码生成选项是不一样的。
- 工程-属性-配置属性-常规-MFC的使用-静态库中使用-应用(Debug和Release版本下面设置路径相同)
-
在共享DLL中使用MFC 和在静态库中使用MFC的区别
2020-12-26 05:30:07在静态库中使用MFC 第一种顾名思义。 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。 第三种是将DLL中的相关代码写进EXE文件中,文件... -
MFC 静态库链接 路径问题
2014-06-26 13:43:39在MFC工程中,链接库的路径 -
MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC
2016-10-17 14:17:59前言我们在使用Microsoft Visual Studio软件(也就是我们常常说的VS)时,其中项目属性中有一项叫做“MFC的使用”,里面包含有不同的设置,会影响我们所编写的程序的使用,今天我就遇到了这个情况,我们一起来总结... -
创建MFC项目时,选择动态库和静态库的区别
2018-07-13 10:37:17创建MFC项目时,选择动态库和静态库的区别动态库在VS2017版本中,选择的时候是叫“在共享DLL中使用MFC”。这样创建的时候生成的*.exe文件一般较小,原因有几点1. 此*.exe程序内部,一般不会包含文件所需要的库,其... -
MFC添加lib文件、静态库三种方法
2021-03-24 22:57:39方法一 #pragma comment(lib,"../Debug/ClassDll.lib") 方法二 方法三 (前提是库工程和应用工程在同一个解决方案中) -
MFC应用程序调用静态库lib
2017-09-21 15:14:58MFC应用程序调用静态库 -
解决MFC的属性页设置里由静态库使用改为动态库使用时出现的错误
2020-05-04 23:34:41因为项目需要,我生成的软件需要安装在没有装过VS之类的软件上运行,结果对方电脑里总是出现各种缺少.dll的提示,无法安装,后面才发现需要把在共享DLL中使用MFC改为在静态库中使用MFC 但是,改了后发现编译不通过... -
怎么在静态库中建对话框,生成lib并在MFC应用程序中使用它?
2018-08-08 18:03:48最近一个项目,需要使用一个static library,在静态库中创建多个对话框,并在,同一个solution下的另一个MFC应用程序中调用。 --------------------------------------------------------------分割线 在挣扎了几... -
skin++动态及静态库实现mfc换肤
2018-04-30 09:54:59skin++动态及静态库实现mfc换肤,包括教程和源码实例,简单明了一看就会 -
MFC的静态库.lib、动态库.dll(包含引入库.lib)以及Unicode库示例
2020-12-28 13:42:43MFC静态库使用下列命名约定: uAFXcWd.LIB . 库命名约定的说明符如下: 说明符 值和含义 u (n) ANSI 或 (u)Unicode c 创建的计划类型:c=all d d=debug版本; release版本略去说明符 默认值为生成用于 Intel 平台的... -
VS2015 MFC 开发的精美温度表盘控件类 静态库 DEBUG RELEASE 版及示例程序、使用说明
2021-10-29 20:28:23在VS2015 MFC GDI+下开发的精美温度表盘控件类静态库(DEBUG RELEASE 版) 可通过定义静态库中的类,显示、设置 温度表盘显示,并可设置控件窗口位置、大小和表盘上各显示区域的位置、弧度。温度显示同时有指针标识和... -
c++笔记_MFC MT静态编译失败(前提已选择静态库以及MT编译)
2019-07-07 18:43:44搞了半天是stdafx.h这个预编译头的问题, 把所有WIN32静态库的stdafx.h文件中的一句代码#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS删除。(VS默认建立静态库工程支持选项) 注释掉之后再编译, 如下图... -
DLL专题之MFC静态库
2008-02-26 13:51:00我们继续延续DLL专题风格.先来写DLL吧.首先,我们建立一个MFC DLL,选择MFC 规则的静态库.这里有一些选项....好了,我开始使用MFC静态库吧.既然上MFC的嘛.我们就用一个对话框来测试在DLL里使用对话框资源. -
QT使用MFC编译的库
2021-03-27 16:59:01假定读者已有知识点 ...1、静态库 2、动态库 3、函数编译名称 4、MFC动态链接库和静态链接库的区别 5、extern "C"的作用 6、__stdcall和__cdecl调用区别 如果有不明白的,请移步另外一位作者文章或者自行百度 ... -
MFC中 使用共享的DLL库和使用静态链接库的区别
2020-08-06 10:55:27”,看到这个问题我首先想到的就是动态链接库的事情,因为我使用的是VS2013正好使用的是12.0版本的库文件,所以说应该是目标机上没有这个库,当然可以手动下载这个库文件,添加至“C:\Windows\System32”目录,但是... -
静态库和动态库的使用
2013-03-25 21:26:49关于静态库和动态库的创建、调用。动态库有:MFC动态库、win动态库等。 -
mfc制作静态库
2016-10-28 20:12:131.建立win32项目 2. 选择静态库 3. 选择mfc支持 然后就可写了 -
MFC基础知识篇——在共享DLL中使用MFC和在静态库中使用MFC的区别
2020-05-08 21:36:50在静态库中使用MFC 指:将DLL对应的lib静态库中的相关代码硬编码到EXE文件中,文件较大,但是可以在没有已经被包含DLL的机器上运行,可移植性好。当然即使如此也并非所有的DLL都会将其硬编码到Exe中 -
在共享Dll和静态库中使用MFC的区别
2017-05-05 15:18:233.在静态库中使用MFC 第一种顾名思义。 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。第三种是将DLL中的相关代码 -
MyControlTest.rar 在VS2015 MFC GDI+下开发的精美温度表盘控件类静态库
2021-10-29 18:37:02在VS2015 MFC GDI+下开发的精美温度表盘控件类静态库(DEBUG RELEASE 版) 可通过定义静态库中的类,显示、设置 温度表盘显示,并可设置控件窗口位置、大小和表盘上各显示区域的位置、弧度。温度显示同时有指针标识和... -
MFC使用方式从共享 DLL使用 转换到静态库中使用 关于AFX_IDS_UNTITLED 的问题
2019-06-23 20:00:33activex 实现中将mfc使用方式从共享 DLL使用 转换到静态库中使用 关于AFX_IDS_UNTITLED 的问题 The exception fires when trying to load the string AFX_IDS_UNTITLED in the following code at docsingl.cpp: ... -
MFC静态链接库、动态链接库的联系与区别
2013-04-17 16:52:49静态链接库(lib)与动态链接库(dll)的比较: 首先,静态链接库与动态链接库...不能再包含其他的动态链接库或者静态库; 动态链接库: dll与EXE文件独立存在,所以发布EXE时需要同时发布dll文件; 可以再包含