物联网实训Day09-交叉编译工具链及编程

交叉编译工具

  • 虚拟机中先下载好arm-linux-gcc-4.5.1.tar.gz文件,将文件解压到/usr/local目录下


    文件解压
  • 打开smb服务器,进入到/usr/local/arm工作目录下


    启动smb服务器,打开文件夹
  • 继续查看文件


    查看文件
  • 继续


    查看
  • 继续


    查看
  • 移除arm-gcc


    移除arm-gcc
  • 查看


    查看
  • 进入etc工作目录,配置文件及保存


    配置
  • 在上图输入gedit命令后,会打开配置文件,source命令使对配置文件的修改生效。修改profile的配置文件。
  • 在下图位置添加一句export PATH=$PATH:/user/local/arm/4.5.1/bin/
    修改profile配置文件
  • 查看:只对root用户的配置文件,gedit /root/.bashrc
    只对root用户的配置文件

编程

  • 创建文件夹test,打开这个文件夹,修改权限为所有。
  • 创建test.c文件,修改权限为可读可写但不可执行
  • 在文件系统中打开test.c,写入一段代码
#include 
#include 

int main(void)
{
    printf("hello,china!\n");
}
  • 输入gcc test.c -o test
  • ./test即可执行,如下图所示,输出“hello,china!”
gcc语句
  • 使用touch语句创建 add.c sub.c div.c和mul.c文件并修改各文件内容
  • add.c
int add(int a,int b){
    return a + b;
}
  • sub.c
int sub(int a,int b){
    return a - b;
}
  • mul.c
int mul(int a,int b){
    return a * b;
}
  • div.c(注意这里的函数名为div1,div会报错)
int div1(int a,int b){
    return a / b;
}
  • test.c
#include 
#include 

int main(void)
{
    int a = 15;
    int b = 3;
    printf("hello,china!\n");
    printf("a + b = %d \r\n",add(a,b));
    printf("a - b = %d \r\n",sub(a,b));
    printf("a * b = %d \r\n",mul(a,b));
    printf("a / b = %d \r\n",div1(a,b));
}
  • 修改并保存文件后,使用下图gcc语句进行编译,输入./test执行


    .c文件创建、编译、执行
  • 输出结果


    多个.c文件编译

makefile

  • Makefile 或 makefile: 告诉make维护一个大型程序,该做什么。
  • Makefile说明了组成程序的各模块间的相互关系及更新模块时必须进行的动作,make按照这些说明自动地维护这些模块。
  • makefile 带来的好处: “自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率
  • Makefile里主要包含了五个部分内容:显式规则、隐式规则、变量定义、文件指示和注释。
  • 在Makefile中的命令,必须要以[Tab]键开始
  • 执行make命令时,会对磁盘上的文件进行检查,如果目标文件的生成或被改动时的时间至少比它的一个依赖文件还旧的话,make就执行相应的命令,以更新目标文件。目标文件不一定是最后的可执行文件,可以是任何一个中间文件并可以作为其他目标文件的依赖文件。
  • makefile有多种写法,本例中makefile的一种写法:


    makefile
  • 修改好后编译执行:


    编译执行
  • 查看文件
  • 若没有修改相关文件,也没有执行make clean,则make后输出“'test' is up to date”。
  • make之后进行make clean。


    make clean
  • 如果有类似于make: *** No rule to make target,mul.c', needed by test'. Stop.的报错,可以检查一下makefile文件有没有写错或者格式上多了一个空格或者开头使用空格而不是[Tab]键这种类似的格式问题。

————————————————
版权声明:本文为CSDN博主「路灯谣」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lululumiao/article/details/118876858

你可能感兴趣的:(物联网实训Day09-交叉编译工具链及编程)