現在,在我的筆記型電腦 (amd64) 上工作時,我已經可以在 BeagleBone (armhf) 上透過 SSH 編譯程式碼。
我現在想做的是能夠使用任何 IDE 來調試該程式碼(Code::Blocks、KDevelop 或 Qt Creator)。
因此,我想到gdbserver
在 BeagleBone 上運行並連接到它,但它在回复時給了我一個意外值的錯誤。我讀到了它,似乎我需要在本地建立一個 armhf 可執行檔來gdb
進行處理。但我想它還需要一個gdb
為 amd64 構建的面向 armhf 的,所以我嘗試安裝crossbuild-essential-armhf
.為此,我添加了 armhf 架構dpkg --add-architecture armhf
,但隨後我無法進行 apt-get 更新。我得到了很多這些:
Err http://security.ubuntu.com trusty-security/main armhf Packages
404 Not Found [IP: 2001:67c:1562::13 80]
如果我檢查存儲庫,他們確實沒有任何地方有armhf。
那麼,我做錯了什麼?另外,這是使用不同架構進行遠端偵錯的正確方法,還是有更好的方法?
答案1
Ubuntu 對 armh 使用單獨的儲存庫(即http://ports.ubuntu.com/
)。為了能夠成功安裝 crossbuild-essential-armhf,您必須按照以下步驟操作:
跑步
dpkg --add-architecture armhf
/etc/apt/sources.list
為和中的所有 apt deb 行指定正確的體系結構/etc/apt/sources.list.d
,例如:deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu trusty main universe deb [arch=armhf] http://ports.ubuntu.com/ trusty main universe
請注意,為 deb-src 行指定 arch 是沒有意義的。 3. 運行apt-get update
4. 運行apt-get install crossbuild-essential-armhf
看一下https://wiki.debian.org/Multiarch/HOWTO
您可能還想在 chroot(或可能是 docker 容器)中執行這些命令,如本指南所述:Ubuntu 中的 MultiArch (armel / armhf) 入門
答案2
這裡有多種基於 Docker 的交叉編譯器可供選擇:
答案3
無需將 armhf 新增至建置主機的 dpkg 來源。另一種方法是使用 chroot,它可以使用 debootstrap 或從 beagleboard.org 映像填充。
有關使用 VS Code 進行遠端 GDB 符號偵錯的 C++ 交叉編譯的完整指南,請參閱: