crash - 使用 VC2010 修复 libvlc Release模式崩溃

标签 crash calling-convention libvlc release-mode

我正在使用 VC2010 编译的一个应用程序中使用 libVLC(也尝试过 VC2008),我的应用程序的 Debug模式运行良好,但是一旦我编译到 Release模式并尝试调用 libVLC,我就会崩溃。我在 vlc 论坛上寻求帮助,有人提到这通常指向调用约定差异,但是我不确定要检查什么以查看是否是这种情况或更重要的是如何解决它。

一些注意事项:

  • 我正在使用 Ubuntu 编译 libVLC,并遵循 libVLC wiki 上的操作指南。
  • 我在 C++ 文件中使用 libVLC。
  • 我尝试在有和没有调试信息的情况下编译 libVLC。
  • 我尝试调用 libvlc_get_version 和 libvlc_new 作为我的第一个调用,都崩溃了。

  • 即使我的发布版本中没有符号,我也可以看到调用堆栈,它肯定会变得一团糟,因为它显示堆栈中从未调用过的函数,这似乎表明错误的调用约定,但我再次'不知道如何检查/解决这个问题。

    我不确定它是否相关,但我在使用 libvlc 时遇到的另一个问题是我试图延迟加载 dll(已尝试不针对上述问题执行此操作,但没有任何影响),我正在添加链接器标志:/DELAYLOAD:libvlc.dll /DELAYLOAD:libvlccore.dll,但是当链接发生时,我收到以下警告:
    LINK : warning LNK4199: /DELAYLOAD:libvlc.dll ignored; no imports found from libvlc.dll
    LINK : warning LNK4199: /DELAYLOAD:libvlccore.dll ignored; no imports found from libvlccore.dll
    

    然而,它肯定链接到 lib 并需要 dll,如 Dependency Walker 所见(更不用说我正在调用它).. 再次不确定这是否相关但也想把它扔在那里。

    我很感激任何关于这个的建议/帮助。谢谢!

    最佳答案

    我刚刚遇到了同样的问题,在使用 IDA 反汇编程序进行了一些挖掘之后,我发现链接器会抛出所有 libvlc 导入。是的,增量标志将它们重新添加,但正如你所说,这不是问题的解释。

    现在我在设计驱动程序时遇到了类似的情况,其中 Release 消除了函数指针和字符串。解决方案是将 Linker\Optimization\References 设置为 No (/OPT:NOREF)。因此,即使链接器认为它们未被使用,链接器也会保留所有引用。

    当然,这可以解决问题。

    于是另一个谜团解开了。 ,)

    最好的祝福
    瓦尔德马尔

    关于crash - 使用 VC2010 修复 libvlc Release模式崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885259/

    相关文章:

    C# Vlc Player鼠标双击事件

    java - 如果 Linux 发行版没有从正在运行的 Java 程序中安装 LibVLC,我该如何告诉它 apt-get install LibVLC?

    macos - 为什么 Epic Games Launcher 在 MacOS 上崩溃? (崩溃报告)

    visual-studio-2008 - 显示XAML View 时,Visual Studio 2008崩溃。如何获得更多信息?

    C++ GetModuleFileName 访问冲突

    java - 安装 JBoss 后 Eclipse 不断崩溃

    linux - 为什么在返回 MEMORY 类型时返回 %rax 中的对象地址?

    windows - __stdcall 没有任何修饰

    assembly - stdcall (callee-pops) 中变量参数的堆栈清理

    swift - 当我停止视频时,VLCKit : Can't reset VLCMediaPlayer. 位置为 0