程序运行时显示:msvcr100.dll /msvcr100d.dll 丢失--->解决方案在此
2014-05-12 17:17
141 查看
本人原来的问题帖http://bbs.csdn.net/topics/390781716,解答见斜体字后面(lz可是花了20积分的,看到有用的记得顶一下哦)
编译环境:本人编译环境VS2010 pro,运行于windows7 32bit ultimate下。
测试环境:洁净的 WIndows 7 64bit Ultimate 和 Windows 8.1 32bit pro,未安装任何编程软件。
问题:本人尝试编译一个很小的程序,构建一个项目之类的,编译链接完全没问题。在本机运行良好。
debug版本运行于测试环境,提示丢失msvcr100d.dll。
release版本运行于测试环境,提示丢失mscvr100.dll。
现状:本人使用VS自带的命令提示符(VS_CMD)编译的程序完好运行于测试环境。编译命令是cl(cl.exe)。
而VS搞一个项目编译出的却不行,为什么?求解决方案。不是复制dll文件什么的,谢谢!!
PS:本人查看VS项目的log文件看到其编译使用的程序也是cl.exe.
log文件内容如下:
生成启动时间为 2014/5/9 19:17:17。
1>项目“F:\testChar\ix32or64\ix32or64\ix32or64.vcxproj”在节点 2 上(rebuild 个目标)。
1>_PrepareForClean:
正在删除文件“Release\ix32or64.lastbuildstate”。
InitializeBuildStatus:
正在创建“Release\ix32or64.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
ClCompile:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release\\" /Fd"Release\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt isX64orX86.cpp
isX64orX86.cpp
Link:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"F:\testChar\ix32or64\Release\ix32or64.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Release\ix32or64.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"F:\testChar\ix32or64\Release\ix32or64.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"F:\testChar\ix32or64\Release\ix32or64.lib" /MACHINE:X86 Release\isX64orX86.obj
正在生成代码
已完成代码的生成
ix32or64.vcxproj -> F:\testChar\ix32or64\Release\ix32or64.exe
Manifest:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /outputresource:"F:\testChar\ix32or64\Release\ix32or64.exe;#1" /manifest Release\ix32or64.exe.intermediate.manifest
FinalizeBuildStatus:
正在删除文件“Release\ix32or64.unsuccessfulbuild”。
正在对“Release\ix32or64.lastbuildstate”执行 Touch 任务。
1>已完成生成项目“F:\testChar\ix32or64\ix32or64\ix32or64.vcxproj”(rebuild 个目标)的操作。
生成成功。
已用时间 00:00:02.41
如果你习惯使用VS_CMD,可以使用在编译选项中加上/MD 或者/MT试试。详情见cl /?提示。
如果是直接使用VS_Project形式,可以在项目属性->配置属性-> C/C++ -> 代码生成 ->运行库,此项改为/MT或者/MTd。建议前者,因为文件会小很多;)
原理如下:
(1)/MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。另外托管C++和CLI中不再支持/MT和/MTd选项。
(2)/MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。
原理介绍详情参照http://blog.csdn.net/wqvbjhc/article/details/6612099
编译环境:本人编译环境VS2010 pro,运行于windows7 32bit ultimate下。
测试环境:洁净的 WIndows 7 64bit Ultimate 和 Windows 8.1 32bit pro,未安装任何编程软件。
问题:本人尝试编译一个很小的程序,构建一个项目之类的,编译链接完全没问题。在本机运行良好。
debug版本运行于测试环境,提示丢失msvcr100d.dll。
release版本运行于测试环境,提示丢失mscvr100.dll。
现状:本人使用VS自带的命令提示符(VS_CMD)编译的程序完好运行于测试环境。编译命令是cl(cl.exe)。
而VS搞一个项目编译出的却不行,为什么?求解决方案。不是复制dll文件什么的,谢谢!!
PS:本人查看VS项目的log文件看到其编译使用的程序也是cl.exe.
log文件内容如下:
生成启动时间为 2014/5/9 19:17:17。
1>项目“F:\testChar\ix32or64\ix32or64\ix32or64.vcxproj”在节点 2 上(rebuild 个目标)。
1>_PrepareForClean:
正在删除文件“Release\ix32or64.lastbuildstate”。
InitializeBuildStatus:
正在创建“Release\ix32or64.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
ClCompile:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release\\" /Fd"Release\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt isX64orX86.cpp
isX64orX86.cpp
Link:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"F:\testChar\ix32or64\Release\ix32or64.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Release\ix32or64.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"F:\testChar\ix32or64\Release\ix32or64.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"F:\testChar\ix32or64\Release\ix32or64.lib" /MACHINE:X86 Release\isX64orX86.obj
正在生成代码
已完成代码的生成
ix32or64.vcxproj -> F:\testChar\ix32or64\Release\ix32or64.exe
Manifest:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /outputresource:"F:\testChar\ix32or64\Release\ix32or64.exe;#1" /manifest Release\ix32or64.exe.intermediate.manifest
FinalizeBuildStatus:
正在删除文件“Release\ix32or64.unsuccessfulbuild”。
正在对“Release\ix32or64.lastbuildstate”执行 Touch 任务。
1>已完成生成项目“F:\testChar\ix32or64\ix32or64\ix32or64.vcxproj”(rebuild 个目标)的操作。
生成成功。
已用时间 00:00:02.41
如果你习惯使用VS_CMD,可以使用在编译选项中加上/MD 或者/MT试试。详情见cl /?提示。
如果是直接使用VS_Project形式,可以在项目属性->配置属性-> C/C++ -> 代码生成 ->运行库,此项改为/MT或者/MTd。建议前者,因为文件会小很多;)
原理如下:
(1)/MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。另外托管C++和CLI中不再支持/MT和/MTd选项。
(2)/MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。
原理介绍详情参照http://blog.csdn.net/wqvbjhc/article/details/6612099
相关文章推荐
- vector<bool>中的代理机制与程序运行效率
- Visual Studio 2008“选项”对话框 ->“项目和解决方案”->“生成并运行”
- opencv配置好后运行出现错误:"计算机中丢失opencv_core231d.dll" 等dll文件的解决方案
- tipask修改记录->前台首页分类列表中,在后台增加分类是否在此显示的开关
- python安装成功但运行失败显示计算机丢失api组件解决方案
- <C++>计算程序运行时间
- 第九周【项目1】在第8周项1的基础上(1)再定义一目运算符 -,-c相当于0-c(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- IE->选项->显示友好http错误,去掉,这是调试asp程序的第一步
- 编写程序比较两个16位带符号数的大小,若A>B,则显示出A>B,否则显示B > A。
- eclipse运行程序显示the user operation is waiting for "building workspace" to complete
- fedora14下运行程序出现GLib- GIO:ERROR:gdbusconnection.c:2270:initable_init: assertion failed: (connection->
- node中"require"不是内部或外部命令,也不是可运行的程序 或批处理文件;express -V无法显示express版本信息等问题。
- 可执行程序无法在Linux上运行,显示line 1: syntax error: word unexpected (expecting ")
- VS出现运行对话框程序 pThread->m_pMainWnd->DestroyWindow(); 错误
- Collection -&gt; .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率
- 可执行程序无法在Linux上运行,显示line 1: syntax error: word unexpected (expecting ")" )
- <<探讨linux/unix>>之运行程序
- Windows核心编程<读书笔记四之程序>显示系统中进程、线程、模块详细信息
- 'netstat' 不是内部或外部命令,也不是可运行的程序或批处理文件-解决方案
- 可执行程序无法在Linux上运行,显示line 1: syntax error: word unexpected (expecting ")