当前位置:编程学习 > C#/ASP.NET >>

VS2010修改C++项目为“静态库中使用MFC”编译问题

问题起源:发布的程序(exe)在其他电脑不能运行,报错如下:

网上的解决办法:
方案1.采用静态编译
    使用VS2010编译的程序在windows xp中运行时,经常会出现找不到相关的DLL文件,我们可以使用静态编译的方法把这些运行依赖文件打包到*.exe中来,以减少对环境的依赖。
一般可以配置以下两项:
(1)项目 -> **属性 -> 配置属性 -> 常规 -> MFC的使用 :在静态库中使用MFC。
(2)项目 -> **属性 -> 配置属性 -> C/C++ -> 代码生成 -> 运行库 :多线程(/MT)。
方案2.将mfc100.dll和应用程序一起打包发布,并在该包中加入安装控件的说明文件
方案3.将程序和vcredist_x86.exe一起打包发布(或提示用户下载并安装vcredist_x86.exe)
我想选择方案1,方案2和3对于程序用户来说来需要注册,麻烦。(我就想要用方案1)

按照方案1处理后,会出现若干这样的问题:
错误 70 error LNK2005: _strtol 已经在 libcmtd.lib(strtol.obj) 中定义 E:\xxx\xxx\xxx\msvcrt.lib(MSVCR100.dll)
百度了一下:

随之而来更多的报错:
错误 76 error LNK2019: 无法解析的外部符号 __imp__vfprintf,该符号在函数 _OPENSSL_showfatal 中被引用 xxx\libeay32.lib(cryptlib.obj)

C++ MFC Visual Studio 2010 发布 --------------------编程问答-------------------- 如果选择忽略libcmtd.lib,更多的错误:263个,忽略msvcrt.lib只有17个。
错误 239 error LNK2019: 无法解析的外部符号 __malloc_dbg,该符号在函数 "void * __stdcall AfxAllocMemoryDebug(unsigned int,int,char const *,int)" (?AfxAllocMemoryDebug@@YGPAXIHPBDH@Z) 中被引用 xxx\nafxcwd.lib(afxmem.obj)
--------------------编程问答-------------------- 编译可以通过,错误都是在生成exe时候。 --------------------编程问答-------------------- 用 1 时,你编二个 exe ,一个会出错,另一个会生成,用它就行了。
<全部生成>
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,