2012-01-16 126 views
2

我在使用VC2010編譯我的一個應用程序中使用libVLC(也試過VC2008),我的應用程序的調試模式很好,但只要我編譯爲發佈模式並嘗試調用libVLC我得到一個崩潰。我在vlc論壇上尋求幫助,有人提到這通常指的是調用約定的差異,但我不確定要檢查是否是這種情況,或者更重要的是如何解決它。使用VC2010修復libvlc發佈模式崩潰

一些注意事項:

  • 我使用Ubuntu和下面的如何引導上libVLC維基libVLC編譯。
  • 我在C++文件中使用libVLC。
  • 我試過在沒有調試信息的情況下編譯libVLC。
  • 我已經嘗試調用libvlc_get_version和libvlc_new作爲我的第一個調用,都崩潰。

即使我沒有在我的發行版本的符號,我可以看到調用堆棧,它肯定是越來越亂了,因爲它是顯示那些從來有史以來叫這似乎表明堆棧功能錯誤的調用約定,但我不知道如何檢查/修復此問題。

我不確定它是否是相關的,但我與libvlc有一個問題是我試圖延遲加載dll(試過沒有爲上述問題做這件事,但它沒有改變),我「M添加鏈接標誌:/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中看到的(更不用提我調用它)..再次不確定這是否有關,但也想把它扔出去。

我很感激任何意見/在這一個幫助。謝謝!

+0

我發現添加/ INCREMENTAL到我的鏈接器標誌修復了問題,但我不明白爲什麼,直到我做我不認爲這是一個解決方案。 :/ – mirswith 2012-01-16 21:39:35

+0

您可以使用[libvlc-sdk]中的.libs(https://github.com/RSATom/libvlc-sdk)。 libs會使用[vc-libvlc](https://github.com/RSATom/vc-libvlc)生成,它基於https://wiki.videolan.org/GenerateLibFromDll/ – RSATom 2015-09-15 11:57:15

回答

3

我剛剛遇到了同樣的問題,經過與IDA dissasembler的一些挖掘後,我發現鏈接器會拋出所有libvlc導入。並且是INCREMENTAL標誌將它們添加回來,但正如你所說的那樣,它不是對問題的解釋。

現在我在設計一個驅動程序的時候發生了類似的情況,其中Release釋放了函數指針和字符串。解決方案是將鏈接器\優化\參考設置爲否(/ OPT:NOREF)。所以,即使鏈接器認爲它們沒有被使用,鏈接器也會留在所有引用中。

當然,這可以解決問題。

解決了另一個謎題。 )

問候 瓦爾德馬

-1

實際上,加入 '/ OPT:NOREF' 解決問題爲好,至少在我的情況。我認爲這個問題可能是由dlltool的'問題'造成的,因爲ffmpeg存在同樣的問題(http://ffmpeg.org/platform.html#Linking-to-FFmpeg-with-Microsoft-Visual-C_002b_002b),並且像ffmpeg,libvlc(我猜)可能會用'dlltool'而不是'lib'生成windows'lib'文件。 exe'從msvc。與DLL工具相關的錯誤報告在這裏:https://sourceware.org/bugzilla/show_bug.cgi?id=12633#c1

因爲你聲稱你是「使用Ubuntu編譯libVLC」,我想你可能遇到了同樣的問題。希望它會有所幫助。

順便說一句,ffmpeg的官方發行版提供'.def'文件,所以我可以用msvc中的'lib.exe'重新生成'正確'的lib文件並解決問題。然而,由於vlc的官方windows分發版不提供'.def'文件,並且我無法通過'dumpbin和lib'方法重建lib文件(dumpbin失敗時,必須有一些奇怪的dll),我無法進一步驗證。