vc2010设置为静态编译

VS2019 VC++ 静态库的开发与使用 前言 这篇文章应该写在这个系列里面的:VS2017的C++开发心得(九)DLL动态链接——多项目开发。 但当时没写,只写了动态链接的相关内容,是因为我认为静态链接相比较动态链接会简单得多,所以干脆就略过了。既然有人提问了,那我就简单的开发流程和主要遇到的问题来讲讲静态库的开发。 首先总体来看,静态库和动态库的区别在于: 1. 静态库只出现在项目的编译生成的链接期,而动态库则是程序运行时加载使用的; 2. 静态库只有一个.lib文件,而动态库除了一个.dll文件以外一般还有个对应的.lib文件; 阅读详情

问题:VS2010 c++编写的程序在别人的机子运行不了,缺少mfc100u.dll xxx100d.dll等的解决方法

解决方法有两种:
1.将这些dll打包,和应用程序一起发布;
2.采用MFC静态编译;



附1:VS2010中静态编译设置方法
 
    使用VS2010编译的程序在windows xp中运行时  经常会出现找不到  相关的DLL文件,我们可以使用静态编译的方法把这些运
行依赖文件打包到*.exe中来,以减少对环境的依赖。
一般可以配置一下两项:
1.项目 -> 配置属性->常规->MFC的使用 :在静态库中使用MFC。
2.项目 -> 配置属性->C/C++->代码生成->运行库 :选择/MT。


如果只配置了1,没配置2,会报错
error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

附2:
有一种情况是,如果应用程序A中用到了某个静态lib库,而制作这个lib库的时候是配置的静态链接(MT)的,
那么应用程序A也需要配置程序MT去编译,否则会报各种符号重复定义的错误。比如

错误 1 error LNK2005: _free 已经在 libcmtd.lib(dbgheap.obj) 中定义         MSVCRT.lib

错误 2 error LNK2005: _malloc 已经在 libcmtd.lib(dbgheap.obj) 中定义     MSVCRT.lib 

即需要配置相同的编译选项。







参考
http://www.cnblogs.com/jifeng/archive/2011/06/24/2088872.html

http://www.cnblogs.com/kex1n/archive/2013/04/02/2995791.html

谢谢作者



Visual Studio 中 VC++/MFC 下 jsoncpp 静态库的编译和引用 Visual Studio 中 VC++/MFC 下 jsoncpp 静态库的编译和引用 包括怎么编译,怎么在自己的工程中引用。 阅读详情

相关推荐

VC6编写的程序移植到VS2010编译时error C2440: “static_cast”问题的解决

<br /><br />编写自定义消息映射的时候,VS编译器报错:<br />error C2440: “static_cast”: 无法从“LRESULT (__thiscall CSimpleThreadDlg::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”<br />原因是VC6项目移植到编译时检查更严格的VS2010上,需要针对源代码做出更改,解决方法很简单:<br />ON_MESSAGE消息在afxmsg_.h中有

4811

MSVC执行动态编译静态编译

项目-属性-配置属性-常规-MFC的使用,选择:在共享 DLL 中使用 MFC。项目-属性-配置属性-常规-MFC的使用,选择:在静态库中使用 MFC。如果是debug模式,选择:多线程调试 DLL (/MDd)如果是Release模式,选择:多线程 DLL (/MD)如果是debug模式,选择:多线程调试 (/MTd)如果是Release模式,选择:多线程 (/MT)项目-属性-配置属性-c/c+±代码生成-运行库。项目-属性-配置属性-c/c+±代码生成-运行库。

m0_60352504的博客 744

VC2010编译libiconv静态库详解与实战使用

在跨平台开发日益普及的今天,处理不同字符编码之间的转换成为软件开发中不可忽视的重要环节。libiconv是 GNU 项目提供的一个开源库,专门用于实现多种字符编码之间的高效转换。它支持包括 ASCII、GB2312、GBK、UTF-8 等在内的多种字符集,广泛应用于国际化(i18n)和本地化(l10n)场景中。无论是在 Linux、Windows 还是嵌入式系统中,libiconv 都能提供稳定可靠的编码转换能力。

weixin_42515842的博客 928

VC++DLL动态链接库编程】VC++静态编译(3)

创建一个静态库,得有一个程序去调用它, 首先添加一个类:菜单栏: 项目-->添加类-->C++类 在staticLib右击属性, 新建一个项目: 静态库的引用:除了项目设置中的属性进行引用;还可以选择通过代码进行引用,即通过预编译的指令:#pragma comment(lib,"staticLib")这段代码只能放在cpp或c文件中,不能放在.h文件中,以防多次

荪荪的博客 2334

Visual Studio MFC静态编译与动态编译

打开工程属性设置,在MFC的使用框选择“在共享DLL中使用MFC”,此时生成的exe文件很小,移植到其它电脑上运行时需要依赖的dll文件(即要有vs环境)。解决办法:.项目 -> 配置属性-> 链接器-> 输入->附加依赖项->编辑添加-〉windowscodecs.lib。打开工程属性设置,在MFC的使用框选择“在静态库中使用MFC”,此时生成的exe文件较大,移植到其它电脑上可以直接运行不依赖其它文件。

huanxiajioabu的博客 1880

c++ 静态编译和动态编译

C++是一种高级编程语言,它支持两种不同的编译方式:静态编译和动态编译

安牛牛牛的博客 1900

vs2010静态库中使用 LNK2019: 无法解析的外部符号

最近在对一个C++的应用系统进行修改编译的时候,发现在静态库中编译一直无法编译通过,网上找了很多资料,得出的结论是:      静态库在VC6编译而主程序在VC2010编译,大家用的CRT不同。 多数给出的解决方案是要改代码,如新增  extern "C" ,让VS2010能够认识VC++下面的函数,但是我觉得如果要改代码的话,那微软在VS新产品研发上就算失败了,开发者在移植代码的时候无疑会

生如夏花之灿烂! 9907

Windows环境下使用VS2010编译OpenSSL

准备工作: 1、安装VC++ 2010。 2、需要perl的支持,下载最新ActivePerl并安装,网址:http://www.activestate.com/ 3、下载 Openssl并解压,下载网址:https://www.openssl.org/source/ 编译步骤: 1.使用VS200510下的Visual Studio 2010 Comma

swanabin的专栏 3663

【原创】VS2010编译的库在VC6下使用问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33788244的博客 352

VS2010编译openssl-1.0.1e

 使用VS2010编译openssl-1.0.1e成功 如何在Windows下编译OpenSSL (VS2010使用VC10的cl编译器) 1、安装ActivePerl//初始化的时候,需要用到perl解释器 2、使用VS2010下的Visual Studio 2010 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量) 3、解压缩openssl

feixiangyue的专栏 888

VC的使用

一、VC编译器的快捷键 1、头文件和源文件间切换 有VAX: Alt+O 2、函数定义与实现间切换 有VAX: Alt+G F12 :Goto definition Shift+F12 :Goto reference 3、切换打开的文件视图 Ctrl+TAB 切换打开的文件视图,(顺序向后切换) Ctrl+Shift+TAB切换打开的文件视图,(如果按住shift,顺序向前切换) Alt + Tab 能够在最近查看过的两个文件之间切换。 Ctrl+PgUp 逆序切换工作区视图 Ctrl+PgDn 顺序切换工

pzs0221的专栏 1884

mfc100ud.dll丢失,移植到XP系统无法运行。

使用VC2010生成的可执行程序移植到其他环境中运行,会提示“mfc100ud.dll丢失”。     打开项目,选择属性,分三步:    (1)选择左上角的configuration->Active(Debug)             configuration properties->general->use of MFC,选择use MFC in a static lib

楚小狂 2652

vc6编译出小体积pe文件

VC写的程序体积是挺大的,网上也有很多优化的文章,都是针对VC6.0来说的。我把我的总结下。   #include #pragma comment(lib,"kernel32.lib") #pragma comment(lib,"user32.lib")   写Win32程序的话,windows.h 是必须的,使用动态连接必要的系统库,可以把link下的链接库全部删除,需要就练级

乐朝夕与之共 909

VC2010从空项目开始搭建MFC程序时的注意事项

VC2010的智能感知没有在C#下那么好,添加新的头文件后,要先生成解决方案才会感知到 点击资源列表,在右方的属性窗口可以直接编辑ID和值,但是打开了资源就不能编辑了 编译器报错" Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version"时,调整如下设置:右

abcbuzhiming的专栏 1163

error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory VC2010

在用VC2010静态链接后,编译出现这个错误提示: uafxcwd.lib(afxglobals.obj) : error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory。 解决方法: 在工程中添加链接 windowscodecs.lib。 ...

sqhily2008的博客 2387

raknet android,GitHub - Psybrus/RakNet: RakNet is a cross platform, open source, C++ networking engi...

RakNet 4.081Copyright (c) 2014, Oculus VR, Inc.Package notesThe Help directory contains index.html, which is full help documentation in HTML formatThe Source directory contain all files required for t...

weixin_35943077的博客 219

VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件

正常情况下,当我们用VC编译出一个Console/Win32类型项目的exe程序时(这里暂不考虑MFC程序),会依赖于msvcrxx.dll文件(xx为不同VC对应的版本号,VC2005为80,VC2008为90,VC2010为100),发布程序的时候,就需要把对应的dll也copy过去,比较不方便。 通过以下的方法,可以让exe不依赖于这些dll(不过生成的exe会大很多) 以VC2010

亮子说编程的博客 766

没有找到MSVCR100.dll 解决办法

没有找到MSVCR100.dll 解决办法   编译好的应用程序在别的机器打开时: "没有找到MSVCR100.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。" 原因: 说明了你的程序是用VisualStudio 2010编译的,而且对编译器配置选项为动态连接VC运行库而别的机器上没有该库导致。。   解决办法: VS中选中project-->property

1403
上一篇: vc2010创建lib和使用
下一篇: vs2010编译curl为static库及测试
luck_good
博客等级 码龄15年 59粉丝 127原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值