Visual Studio 2013 发布编译不打开文件

Posted

技术标签:

【中文标题】Visual Studio 2013 发布编译不打开文件【英文标题】:visual studio 2013 release compilation dont open files 【发布时间】:2015-07-19 20:26:20 【问题描述】:

我已经搜索了其他答案,但我没有找到解决方法,我无法理解为什么会发生这种情况,有人可以帮忙吗?

当我使用调试模式编译时,一切运行正常,即使我将调试配置从多线程调试 DLL (/MDd) 更改为多线程 DLL (/MD),但是当使用发布程序编译时尝试打开文件

std::ofstream inFile(fileNamePath, std::ios_base::app | std::ios_base::out);

不知道还有多少其他错误,因为当程序开始运行时,他会打开一个配置文件并崩溃。

此消息在等待时间出现

LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library

当程序开始运行时,这会在调试时发生

'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp120.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\wsock32.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\crypt32.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr120d.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ws2_32.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr120.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msasn1.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nsi.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Symbols loaded.
'Servidor.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcryptprimitives.dll'. Symbols loaded.
First-chance exception at 0x777CDF63 (ntdll.dll) in Servidor.exe: 0xC0000005: Access violation writing location 0x00000014.
Unhandled exception at 0x777CDF63 (ntdll.dll) in Servidor.exe: 0xC0000005: Access violation writing location 0x00000014.

所有其他文件均已配置多线程调试 DLL (/MDd) 用于调试,多线程 DLL (/MD) 用于发布。

【问题讨论】:

您是否链接了任何第三方库? inFile(即我猜的输入文件)以及 append + out IO 操纵器,对我来说似乎很奇怪.. 已经解决,其他带有#pragma comment(lib, "MSVCRTD.lib") 的 cpp 文件,当编译版本和程序现在运行良好但仍然有时我没有看到只是更改为 "MSVCRT.lib"警告 LNK4098:defaultlib 'LIBCMT' 与其他库的使用冲突;使用 /NODEFAULTLIB:library。 【参考方案1】:

我有根据的猜测,您正在混合调试和发布配置。

尝试在没有优化的情况下使用Multi-threaded DLL(就像你所做的那样)编译你的代码,这样你就可以得到一个可以调试并使用相同 CRT 的程序。

【讨论】:

以上是关于Visual Studio 2013 发布编译不打开文件的主要内容,如果未能解决你的问题,请参考以下文章

Qt 4.8,Visual Studio 2013 编译错误

面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志

在 Visual Studio 2013 中使用 Roslyn 编译器

使用 Visual Studio Express 2013 进行 64 位编译

如何编辑 Microsoft Visual Studio 2013 编译器开关? [复制]

Visual Studio 2013 编译严格的 c++11