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

时间:2014-09-09 09:54:47

标签: 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 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,它可以正常运行。

  1. 我发现可执行文件在加载时不会加载库 库使用/MT编译。那是为什么?
  2. 此外,如果使用/MT编译库并进行调试 链接应用程序时启用信息(/DEBUG param到链接器)然后加载库和一切 正确执行。为什么?

0 个答案:

没有答案