Visual Studios 2010 中的 libx264 - Release Build 中的内存错误

Posted

技术标签:

【中文标题】Visual Studios 2010 中的 libx264 - Release Build 中的内存错误【英文标题】:libx264 in Visual Studios 2010 - Memory error in Release Build 【发布时间】:2010-12-08 19:01:30 【问题描述】:

我正在构建一个应用程序并使用 x264 库作为编码器。我已经使用 MSys/MingW 为我的 Windows 系统构建了库。该库在调试版本下工作正常(注意调试和发布版本都使用默认的 VS2010 设置)。但是,在 release 下,第一次调用 x264 库时会引发访问冲突错误,具体而言:

  Unhandled exception at 0x00905a4d in StreamTest.exe:
  0xC0000005: Access violation.

在这一行抛出错误:

x264_param_default_preset((params), "veryfast", "zerolatency");

当我在弄清楚如何编译库时,我遇到了很多关于 Windows/Visual Studios 中的内存对齐以及它与 x264 预期的对齐方式不特别兼容的讨论。例如,在 MSys 中编译时,我必须启用 --enable-memalign-hack。我想知道此错误的根源是否可能源于内存对齐问题,该问题仅通过我的发布版本中的某些设置表现出来。不幸的是,我对细节几乎一无所知,所以来到这里。

谁能给我更多关于内存对齐问题和任何可能导致此问题的 Visual Studio 设置的信息?非常欢迎任何其他解决此问题的提示/指针。

谢谢。

编辑

来自下面的答案:

    从链接的 SO 问题中,我得到的印象是他在 OpenCV 构建中添加了“使用调试器信息构建”?由于我正在使用 G++ 通过 MSys 构建 x264 库,因此我不确定我能做到这一点。我已经检查了我的项目的构建设置,并且在发布和调试下它都有调试器信息。不确定我是否错过了该帖子中的某些内容,请告诉我。

    我尝试了应用程序验证程序。似乎 x264 正在尝试根据 App 验证程序输出从不可执行的内存中执行代码:

    VERIFIER STOP 0000000000000650: pid 0x1B18: 
    

    尝试在不可执行的内存中执行代码(第一次机会)。

    0000000000905A4D : Address being accessed.
    0000000000905A4D : Code performing invalid access.
    000000000021EA90 : Exception record. Use .exr to display it.
    000000000021E5A0 : Context record. Use .cxr to display it.
    

要从这个输出中收集什么?

再次感谢。

【问题讨论】:

【参考方案1】:

参考类似的问题here,看看是否也对你有帮助。

编辑

发布您还想通过AppVerifier运行您的应用程序

编辑

在我看来,发布“使用调试器信息构建”相当于打开 -g 开关和优化开关并关闭任何 DEBUG 宏。此外,如果您附加了调试器(使用 Gflags )以使用调试器启动您的进程(获取 windbg 的副本并使用它进行调试)。

当 Appverifer 停止您的进程时,使用 .cxr 命令获取上下文信息。这应该有助于指出问题。

【讨论】:

感谢您的输入,我已将您的建议结果添加到我的 OP 中。请发表评论! 感谢所有帮助,我设法将错误追溯到我的 pthread 构建问题。我抓住了一个合适的基于 MSVC 的 pthread 构建,现在它工作正常。干杯。

以上是关于Visual Studios 2010 中的 libx264 - Release Build 中的内存错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:名称在当前上下文中不存在(Webpart、C#、Visual Studios、SharePoint 2010)

Visual Studios 2008 中 C++ 开发中的链接错误

Visual Studios 调试设置保存在哪里?

可以将其他文件类型添加到 Visual Studios 清理过程吗?

Visual Studios 忽略文件

如何解决 Dlib Visual Studios C++ 错误?