C++ 为什么在发布模式下链接不同的MSVC运行时库会崩溃?
我正在使用ffmpeg和Qt构建一个小的演示应用程序C++ 为什么在发布模式下链接不同的MSVC运行时库会崩溃?,c++,visual-studio-2010,ffmpeg,runtime,msvcrt,C++,Visual Studio 2010,Ffmpeg,Runtime,Msvcrt,我正在使用ffmpeg和Qt构建一个小的演示应用程序 FFmpeg是使用/MT构建的(交叉构建或使用visual 2010构建) Qt总是使用/MD 我的小例子总是用/MD 什么时候申请 int main(int argc, char *argv[]) { QApplication a(argc, argv); av_gcd (75, 25); return a.exec(); } //note : following is av_gcd source in f
- FFmpeg是使用
构建的(交叉构建或使用visual 2010构建)/MT
- Qt总是使用
/MD
- 我的小例子总是用
/MD
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
av_gcd (75, 25);
return a.exec();
}
//note : following is av_gcd source in ffmpeg libs:
int64_t av_gcd(int64_t a, int64_t b)
{
if (b)
return av_gcd(b, a % b);
else
return a;
}
在释放模式下执行,它崩溃,因为它没有将av_gcd
视为可执行内存。错误是:
mylittleexample.exe中0x0000000300905a4d处的首次机会异常:
0xC0000005:位置处的访问冲突0x0000000300905a4d
==========================================================验证程序停止0000000000000650:pid 0x1B9C:尝试在中执行代码 非可执行内存(第一次机会)。 0000000 300905A4D:正在访问的地址
0000000 300905A4D:代码 正在执行无效访问
0000000000 9FF770:异常记录。使用 .exr来显示它
0000000000 9FF280:上下文记录。使用.cxr 显示它 ======================================= 地址
0x0000000300905a4d
不会更改,无论库中的函数(本例中为ffmpeg)或用于可执行文件(vs2010、vs2012)的编译器或其他机器如何
如果我使用用/MD
构建的FFmpeg,它的工作原理与人们所期望的一样
/MT
编译的。为什么呢/MT
编译库并进行调试
链接应用程序时(/DEBUG
参数)然后加载库和所有内容
正确执行。为什么?