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

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

一、添加NFS目录

新建app/stm32/01_hello目录,然后将app/stm32/添加到NFS的目录下
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第1张图片
接着在开发板上输入如下命令,挂载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 

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

    return 0;
}

使用gcc编译运行如下所示
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第2张图片

三、交叉编译

使用交叉编译工具链进行编译
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第3张图片
然后在开发板上运行如下所示
在这里插入图片描述
我们尝试运行使用gcc编译出来的可执行文件,可以看到,无法运行
在这里插入图片描述

四、头文件包含路径

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

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

可以看到如下依赖文件,这些都是arm-linux-gnueabihf-gcc编译工具链的include头文件目录下的文件,
在编译时,会在这些目录下寻找头文件
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第4张图片
然后我们在当前目录下新建一个test.h文件,然后修改main.c文件如下所示

#include 
#include 

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

    return 0;
}

然后编译,可以看到,编译失败,因为test.h文件并没有在编译器的include目录中,所以会提示找不到文件
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第5张图片
这里我们可以加入-I参数,通知编译器添加另外的头文件路径,如下所示,编译成功
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第6张图片
另外,也可以将<>包含头文件修改为""包含头文件,如下所示,编译成功,这是因为使用""时,编译器也会在当前目录下寻找头文件
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第7张图片

五、库文件路径

同样的,相对于的库文件也是在交叉编译器的目录下,我们进入该目录,使用find -name lib目录找找一下库文件的存放地址如下
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第8张图片
我们进入其中一个目录可以看到许多 so 文件,
嵌入式Linux应用基础学习(2)— 第一个HelloWorld程序_第9张图片
如果要指定自己的库文件库文件这么办呢?有如下两种方法

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

你可能感兴趣的:(嵌入式Linux)