Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Crash 使用VC2010修复libvlc发布模式崩溃_Crash_Calling Convention_Libvlc_Release Mode - Fatal编程技术网

Crash 使用VC2010修复libvlc发布模式崩溃

Crash 使用VC2010修复libvlc发布模式崩溃,crash,calling-convention,libvlc,release-mode,Crash,Calling Convention,Libvlc,Release Mode,我在用VC2010编译的一个应用程序中使用了libVLC(也尝试了VC2008),我的应用程序的调试模式工作得很好,但一旦我编译到发布模式并尝试调用libVLC,我就会崩溃。我在vlc论坛上寻求帮助,有人提到这一点通常指向调用约定差异,但是我不确定要检查什么以确定是否是这种情况,或者更重要的是如何修复它 一些注意事项: 我正在使用Ubuntu编译libVLC,并遵循libVLC wiki上的操作指南 我在一个C++文件中使用LIVVLC。 我尝试过编译libVLC,有调试信息也有调试信息 我第

我在用VC2010编译的一个应用程序中使用了libVLC(也尝试了VC2008),我的应用程序的调试模式工作得很好,但一旦我编译到发布模式并尝试调用libVLC,我就会崩溃。我在vlc论坛上寻求帮助,有人提到这一点通常指向调用约定差异,但是我不确定要检查什么以确定是否是这种情况,或者更重要的是如何修复它

一些注意事项:

  • 我正在使用Ubuntu编译libVLC,并遵循libVLC wiki上的操作指南
  • 我在一个C++文件中使用LIVVLC。
  • 我尝试过编译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,并且需要依赖项Walker所看到的dll(更不用说我正在调用它了)。。同样,我不确定这是否有关联,但我也想把它扔出去


我非常感谢您在这方面的任何建议/帮助。谢谢

我也遇到了同样的问题,在与IDA Disassembler深入研究之后,我发现linker抛出了所有libvlc导入。是的,增量标志将它们添加回,但正如您所说,这不是问题的解释

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

当然,这解决了问题

于是又一个谜团解开了

致意
实际上,添加“/OPT:NOREF”也解决了这个问题,至少在我的例子中是这样。我认为这个问题可能是由dlltool的“问题”造成的,因为ffmpeg也有同样的问题(),而且像ffmpeg一样,libvlc(我猜)可能会从msvc生成带有“dlltool”而不是“lib.exe”的windows“lib”文件。dlltool的相关错误报告如下:

正如你声称“使用Ubuntu编译libVLC”,我想你可能遇到了同样的问题。希望能有帮助


顺便说一句,ffmpeg的官方发行版提供了“.def”文件,因此我可以使用msvc中的“lib.exe”重新生成“正确的”lib文件,并解决问题。但是,由于vlc的官方windows发行版不提供“.def”文件,并且我未能通过“dumpbin和lib”方法重建lib文件(dumpbin时失败,dll肯定有什么奇怪的地方),我不能做进一步的验证。

我发现添加/增量到我的链接标志修复问题,但是我不明白为什么,直到我不认为这是一个解决方案。您可以使用中的.libs。libs有generate with,它是基于