libvlc new 呼叫產生段錯誤

2022-03-22 20:23:25 字數 1026 閱讀 5196

在除錯程式的時候,碰到乙個奇怪的段錯誤問題。只要鏈結的時候使用-wl,-rpath=./vlc/lib就會產生段錯誤,如果鏈結的時候使用的是-wl,-rpath=../../tool/vlc/lib則不會出現。

機器是老舊的neokylin 4.0版本,沒有安裝gdb(實際上也不可能去安裝)。無法除錯,所以在程式裡多新增了一些列印輸出,終於定位到產生段錯誤的位置。

輸出查了一些資料

這裡說在posix系統上,sigchld訊號不能被忽略,即訊號處理程式必須設定為sig_dfl(預設處理)或函式指標,而不能是sig_ign(忽略)。

還有libvlc可以建立執行緒。 因此,任何執行緒不安全的程序初始化必須在呼叫libvlc_new()之前執行。

但是這裡沒有說到重點,這些都不是產生段錯誤的原因。

真正的原因是因為vlc存在外掛程式快取,需要重新整理外掛程式快取才行。

vlc/lib/vlc/plugins下存在乙個plugins.bat檔案,cat這個檔案可以發現其中大部分都是普通文字,少數是非文字內容。

通過網路搜尋,找到這篇文章,真正的說明了問題

自己編譯的vlc,vlc-cache-gen程式實際上在vlc/lib/vlc/vlc-cache-gen。執行下面命令即可

export ld_library_path=$ld_library_path:./vlc/lib

./vlc/lib/vlc/vlc-cache-gen ./vlc/lib/vlc/plugins/

然後就沒有問題

段錯產生原因及除錯技巧

產生段錯誤是因為訪問了不該訪問的空間,比如 1 對空指標 指向位址為null的指標 進行操作。2 對野指標 未被初始化的指標 進行操作。3 陣列越界。4 用指針對陣列進行操作,指標偏移到了陣列長度之外。5 對唯讀空間進行操作,比如,操作.rodata空間區域,字串常量 如字串 hello 便是儲存在...

onvif 段錯除錯辦法

希望對大家有幫助 來自於 1 開啟onvif除錯開關,以便讓onvif列印一些可用的除錯資訊。在makefile中新增除錯巨集定義如 cc gcc ddebug 2 開啟除錯巨集後,預設在程式執行的目錄產生三個檔案 recv.log sent.log test.log recv.log是onvif接...

巢狀呼叫易錯問題

general.h內容如下 pragma once include h1.h include struct tt 再建乙個h1.h 檔案,內容如下 include general.h using namespace std void print tt t main.cpp裡面呼叫 print 函式,...