上次尝试硬解失败了,拿软解暂时应付了过去.
这次看看硬解怎么搞剧透:仍以失败告终
本篇安装的包
gdb 10MB
binutils 30MB
正文
开发板部分,跑的是debian10.
因为开发板自带的eMMC空间有限, 我选择先把/usr/local挂载到tf卡里.
sudo mount –bind /media/linaro/SD Card/usr/local /usr/local
然后apt update&apt upgrade一下, 就可以准备开发工作了.
准备用rust slint框架写ui, 最好不依赖窗口管理器, 毕竟暂时只跑一个窗口.
(但是像x11这样的显示服务器还是要有的)
slint有两种渲染模式:
- Qt (需要5.15及以上版本)
- winit
- femtovg (gpu, 稳定)
- skia (gpu, 不稳定)
- software (用cpu)
因为我们用的debian镜像 qt只是5.11版本, 不想研究怎么更新, 还是看看远方的winit吧家人们
基于software的渲染方式已经在实机成功跑通过, 但是我的泰山派可是有一颗g52 gpu的,不能浪费掉!
所以本篇我们尝试跑通femtovg渲染的版本.
在笔记本上通过动态链接交叉编译scp到开发板上, 出现段错误.
gdb一下,提示libGLX.so.0段错误.
猜测可能是交叉编译工具链的opengl版本和开发板上的不一致导致的.
感觉opengl版本的问题应该不好解决,所以我们试试静态链接:
1 | // config.toml |
编译出来发现还是不能在开发板运行, gdb一下发现虽然我们指定了静态链接,但仍然动态链接到一个ld-linux-aarch64.so.1
在开发板上运行ldd myapp
发现链接到的程序用到了2.29和2.3x.
众所周知在另一篇博客中我们在开发板上升级2.3x版本的glibc遇到了很复杂的问题, 所以我们这次选择降低工具链的glibc版本.sudo downgrade aarch64-linux-gnu-gcc
sudo downgrade aarch64-linux-gnu-glibc
降到2.28,再编译一下
然后file target/aarch64-unknown-linux-gnu/release/myapp
, 还有额外的发现:程序不动态链接到ld-xxx.so了,完全是一个静态链接文件.
再次尝试运行,更离奇的事情发生了.
仅提示段错误,并且进gdb run, gdb直接退出了.
遂放弃
这个问题不解决了,byd
tips
如果下次还想尝试的话,我觉得我会选择buildroot自定义吧. debian的东西实在有点旧了.