arm-linux-gcc 交叉编译工具初次使用
本帖最后由 sunsili 于 2022-1-13 00:13 编辑看看这段代码运行效果吧
用vim写代码 shuixianshu.c文件
vim shuixianshu.c
按i键编辑代码:
#include <stdio.h>
void main(void)
{
int hun, ten, ind, n;
printf("Shuixianhuashu result is:");
for(n=100; n<1000; n++)
{
hun = n/100;
ten = (n%100)/10;
ind = n%10;
if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind)
{
printf("%d ", n);
}
}
printf("\n\r");
}这是水仙花数代码, 水仙花数:等于各位数立方之和。详解请参考http://bbs.sunsili.com/thread-225327-1-1.html
写保存退出 按键ESC写命令:wq
gcc -o shuixianshu.o shuixianshu.c
./shuixianshu.o
Shuixianhuashu result is:153 370 371 407
arm-linux-gnueabi-gcc -o shuixianshu.arm shuixianshu.c
./shuixianshu.arm
-bash: ./shuixianshu.arm: cannot execute binary file: Exec format error
(无法运行, 因为我们的电脑是X86框架的,用arm-linux-gnueabi-gcc 编译出来的程序是不在X86平台运行的, 只能要ARM平台下运行, 要下载到开发板上运行, 用用arm-linux-gnueabi-gcc 在ARM开发板运行也为报错,我们后面会说)
怎么把编译好的程序放到开发板呢
1、启动开发板,我这里使用的RK3399开发板
2、连接网络,要与我们的开发电脑linux(一般是虚拟机) 我用的是win10 -wsl(不知道wsl的,请查看超简单!这样在Windows下安装Linux系统,操作更方便-电子技术单片机开发编程WEB开发IT运维-谷动谷力(sunsili.com))在同一局域网
3、查看网络配置:
ifconfig
获得开发板ip
4、开发电脑 输入命令:
sftp 应用名@开发板IP
例我的开发板用户名root IP 192.168.10.76
sftp root@192.168.10.76 (如果用户权限不够,就用sudo sftp root@192.168.10.76)
按提示输入密码
提示选项时输入yes
连接成功是这样的:
sftp>
5、这样可以输入sftp命令了(查看sftp命令详解http://bbs.sunsili.com/thread-225314-1-1.html):
向开发板传文件:
put shuixianshu.arm
6、按提示传入得到开发板路径,一般在当前用户下主目录,我们这里用的root登录的,那么传入开发板的路径就是/home/root
7、在开发板里运行:
到/home/root目录:
cd ~
查看是否有 shuixianshu.arm
ls
查看到是有shuixianshu.arm
运行:
./shuixianshu.arm
提示:
shuixianshu.arm no such file
提示没找这个文件,这里与开发电脑不一样,问题还是不能执行,为什么呢?ARM架构不一样,我们用的RK3399是要arm-linux-gnueabinf-gcc:
arm-linux-gnueabinf-gcc -o shuixianshu.o shuixianshu.c
再重复上过操作, 在开发板运行:
./shuixianshu.o
终于看到与我PC运行一样效果了
Shuixianhuashu result is:153 370 371 407
还有一种方法:
传源码到开发板, 用开发板里gcc, 开发里安装的gcc, 就是arm-linux-gnueabinf-gcc,在开发板编译就是交叉编译了,我们很少这样用,编译有误,在开板里,只能用vi/vim不方便修改代码。
重复上述传shuixianshu.c到开发板,然后编译运行:
gcc -o shuixianshu.o shuixianshu.c
./shuixianshu.o
Shuixianhuashu result is:153 370 371 407
使用与PC一样了,其实开发板就是一台linux电脑。
本帖最后由 sunsili 于 2021-8-7 23:45 编辑
注意事项
1、在win10 的linux 子系统下,必须将源码放置在 ~ 主目录下面自己创建一个toolchain目录下,放在e盘或者d盘其他盘,会导致找不到头文件(之前编译homanyOS一直编译不过,也是找不头文件。猜测,微软linux子系统和windows 本身的文件系统兼容性做的不好)
2、编译的时候按照我的步骤加快编译和避开编译其他错误
3、代码里不要有中文字路径(目录、文件名)
页:
[1]