现在,在我的笔记本电脑(amd64)上工作时,我已经可以通过 SSH 在 BeagleBone(armhf)上编译代码。
我现在想做的是能够使用任何 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++ 交叉编译的完整指南,请参阅: