嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序

一、添加NFS目录

新建app/stm32/01_hello目录,然后将app/stm32/添加到NFS的目录下
在这里插入图片描述
接着在开发板上输入如下命令,挂载nfs的目录

mount -t nfs -o nolock,vers=3 192.168.31.141:/home/william/app/stm32 /mnt

进入/mnt目录可以看到01_hello文件夹啊,表示挂在成功
在这里插入图片描述

二、编写程序

01_hello/目录下新建mian.c文件,编写内容如下

#include <stdio.h>

int main(void)
{
    printf("Hello World!\n");

    return 0;
}

使用gcc编译运行如下所示
在这里插入图片描述

三、交叉编译

使用交叉编译工具链进行编译
在这里插入图片描述
然后在开发板上运行如下所示
在这里插入图片描述
我们尝试运行使用gcc编译出来的可执行文件,可以看到,无法运行
在这里插入图片描述

四、头文件包含路径

我们使用如下命令来查看一下main.c文件的依赖

arm-linux-gnueabihf-gcc -M main.c

可以看到如下依赖文件,这些都是arm-linux-gnueabihf-gcc编译工具链的include头文件目录下的文件,
在编译时,会在这些目录下寻找头文件
在这里插入图片描述
然后我们在当前目录下新建一个test.h文件,然后修改main.c文件如下所示

#include <stdio.h>
#include <test.h>

int main(void)
{
    printf("Hello World!\n");

    return 0;
}

然后编译,可以看到,编译失败,因为test.h文件并没有在编译器的include目录中,所以会提示找不到文件
在这里插入图片描述
这里我们可以加入-I参数,通知编译器添加另外的头文件路径,如下所示,编译成功
在这里插入图片描述
另外,也可以将<>包含头文件修改为""包含头文件,如下所示,编译成功,这是因为使用""时,编译器也会在当前目录下寻找头文件
在这里插入图片描述

五、库文件路径

同样的,相对于的库文件也是在交叉编译器的目录下,我们进入该目录,使用find -name lib目录找找一下库文件的存放地址如下
在这里插入图片描述
我们进入其中一个目录可以看到许多 so 文件,
在这里插入图片描述
如果要指定自己的库文件库文件这么办呢?有如下两种方法

  • 编译时,加上“ -L <库文件目录>”这样的选项,用来指定库目录,列如当前目录“ -L./ ”;
  • 编译时,加上“ -labc”这样的选项,用来指定库文件 libabc.so
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐