本章記錄下我針對 nanogui 寫的 videoview 控件,并且在海康的一個攝像頭上測試通過的過程,在開發(fā)的過程中碰到了 segment fault的問題,通過導出 core 文件以及使用 gdb 很快定位出崩潰的原因,在這個過程中再次體驗到了使用 buildroot 進行構(gòu)建的快樂。但是我目前根據(jù) nanogui 開發(fā)的程序尚未繼承到 buildroot 當中,將 nanogui 繼承到 buildroot 這個也算是后期的一個目標。
- 修復ffmpeg編譯一直出錯,提示undefined av_xxxx
- 使用 buildroot 編譯 aarch64-linux-gdb定位 segment fault 問題
- 在 solus 上編譯 buildroot,修復相關(guān)編譯錯誤
1. 鏈接 ffmpeg 庫一直出錯
首先看一下出錯的提示:
后來參考了網(wǎng)上的解決方案,發(fā)現(xiàn)是引用 ffmpeg 頭文件的時候缺少
#ifdef __cplusplus
extern "C" {
#endif
xxxxx /* ffmpeg 頭文件 */
#ifdef __cplusplus
}
#endif
因為 ffmpeg 主要是 c 語言開發(fā)的所以,引用相關(guān)頭文件的時候需要為 C++ 原文件進行一次兼容。要不然的話,就不能正常引用到對應的函數(shù)。
完整 videoview 控件的源碼,我已經(jīng)上傳到我 fork 的 nanogui 倉庫了。這里就不羅列了,這里展示下成功顯示視頻的相關(guān)照片:
2. 使用 gdb 定位 segment fault
在順利完成 ffmpeg 的鏈接編譯之后,開始運行可執(zhí)行程序,發(fā)現(xiàn) segment fault了,我嘗試使用 gdbserver 和 gdb 配置進行定位,發(fā)現(xiàn)默認并沒有編譯出來 aarch64-linux-gdb。只能在 buildroot 中開啟 host gdb 的編譯,主要放開如下宏:
BR2_PACKAGE_HOST_GDB=y
BR2_PACKAGE_HOST_GDB_TUI=y
BR2_GDB_VERSION_8_1=y
BR2_GDB_VERSION="8.1.1"
編譯出來后,在板子上修改 core 配置,放開生成 core 文件:ulimit -c unlimited
。然后將 core 文件發(fā)送到 PC,再使用命令 aarch64-linux-gdb example1 core
對 example1進行調(diào)試(目前我的開發(fā)是直接修改的 example1.cpp進行的)。記得修改下 sysroot 和 solib-search,這部分可以放在當前目錄的 .gdbinit 文件中:
set solib-search-path /home/yangyongsheng/Projects/debian_yy3568/YY3568-Debian10/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/
set sysroot ~/Projects/debian_yy3568/YY3568-Debian10/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/
記得還有修改下 ~/.gdbinit 文件:
set auto-load safe-path /
通過 gdb 很快就可以定位到出錯的代碼位置。
3. 在 solus 上編譯 buildroot
家里的一臺筆記本,我安裝的是 solus,軟件包可能沒有 fedora 那么齊全,所以編譯過程中碰到了一些問題,經(jīng)過幾天的搜索還好是順利將 buildroot編譯通過,通過這幾天的排查問題,我感覺的 solus 依舊好用。有些軟件包官方倉庫沒有就需要自己手動下載源碼安裝,我僅羅列一些我下載的:
├── libdb
├── libnsl
├── libtirpc
├── libxcrypt
特別地在編譯 python2.7 的時候,總是出錯,但是終端提示的問題只是一些警告信息,導致我一直搜索如何排除這些警告,實際還是走了一些彎路。可能是 unbuffer
的鍋,因為我在使用 buildroot menuconfig 的時候使用默認的 unbuffer
總是無法在 solus 上彈出來 menuconfig 的配置界面(因為我要開啟 gdb 編譯選項),在 buildroot 的根目錄直接 make menuconfig 確是可以的,后來我就強制修改 menuconfig 的時候不用 brmake 而是使用 make 規(guī)避了這個問題。下次碰到這個問題需要去對應的 buildroot 的根目錄去 make 確認出錯的根本原因,發(fā)現(xiàn)是鏈接 crypt 的時候出錯的,通過強制創(chuàng)建 /lib/libcrypt.so 到的軟鏈接修復了這個問題。
? ll /lib/libcrypt.so
lrwxrwxrwx root root 26 B Sun Aug 13 13:44:40 2023 ? /lib/libcrypt.so ? /usr/local/lib/libcrypt.so
再展示下在 solus 下使用 buildroot 開心編譯的截圖:
通過這個過程我還發(fā)現(xiàn)了一個軟件包集合的網(wǎng)站 https://dev.getsol.us/source,這里面包含了 solus 有關(guān) python2.7 的配置編譯依賴,最后順利編譯出來了 buildroot 選擇的 python2.7。
審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
87文章
11459瀏覽量
212774 -
C++
+關(guān)注
關(guān)注
22文章
2117瀏覽量
74777 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5504瀏覽量
102226 -
編譯
+關(guān)注
關(guān)注
0文章
676瀏覽量
33746 -
RK3568
+關(guān)注
關(guān)注
5文章
577瀏覽量
6077
發(fā)布評論請先 登錄
風火輪
【新品體驗】風火輪YY3568開發(fā)板免費體驗
【風火輪YY3568開發(fā)板免費體驗】開箱篇 -----最好的RK3568開發(fā)板賞析
【風火輪YY3568開發(fā)板免費體驗】使用之二:系統(tǒng)測試安卓
【風火輪YY3568開發(fā)板免費體驗】01.開箱、燒寫系統(tǒng)
【風火輪YY3568開發(fā)板免費體驗】第二章:YY3568 ffmpeg 編譯以及 nanogui 移植
【風火輪YY3568開發(fā)板免費體驗】第四章:給 nanogui 添加 VideoView 控件,支持 rtsp 視頻流獲取并顯示
【風火輪YY3568開發(fā)板免費體驗】+ YY3568安裝運行Unity的自制游戲教程范例
風火輪科技YY3568開發(fā)板新品上市

風火輪科技又發(fā)新品啦--YY3568開發(fā)板

評論