我正在使用 VC2010 编译的一个应用程序中使用 libVLC(也尝试过 VC2008),我的应用程序的 Debug模式运行良好,但是一旦我编译到 Release模式并尝试调用 libVLC,我就会崩溃。我在 vlc 论坛上寻求帮助,有人提到这通常指向调用约定差异,但是我不确定要检查什么以查看是否是这种情况或更重要的是如何解决它。
一些注意事项:
即使我的发布版本中没有符号,我也可以看到调用堆栈,它肯定会变得一团糟,因为它显示堆栈中从未调用过的函数,这似乎表明错误的调用约定,但我再次'不知道如何检查/解决这个问题。
我不确定它是否相关,但我在使用 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/