我正在使用ffmpeg和Qt构建一个小型演示应用。
/MT
构建(交叉构建或使用visual 2010构建)/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 位置的访问冲突。
=======================================
VERIFIER STOP 0000000000000650:pid 0x1B9C:尝试执行代码 非可执行内存(第一次机会)。0000000300905A4D :正在访问的地址。
0000000300905A4D :代码 执行无效访问。
00000000009FF770:异常记录。使用 .exr来显示它。
00000000009FF280:上下文记录。使用.cxr来 显示它。=======================================
无论库中的函数(在本例中为ffmpeg),或者用于可执行文件(vs2010,vs2012)或其他机器的编译器,地址0x0000000300905a4d
都不会更改。
如果我使用用/MD
构建的FFmpeg,它可以正常运行。
/MT
编译。那是为什么?/MT
编译库并进行调试
链接应用程序时启用信息(/DEBUG
param到链接器)然后加载库和一切
正确执行。为什么?