C++ 为什么在发布模式下链接不同的MSVC运行时库会崩溃?

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和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 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
    参数)然后加载库和所有内容 正确执行。为什么?