C文件的头文件及调用函数位置及gcc使用

C文件的头文件及调用函数位置及gcc使用

C文件示例

#include<stdio.h>//头文件的作用?

int main(int argc,char * *argv[])

{

      if(argc > 2){

       printf(“HELLO, %s!\n”,argv[1]);//调用函数在哪里?

} else {

       printf(“HELLO, WORLD\n”);

}

Return 0;

}

C文件的解析

1.头文件

头文件的路径:stdio.h的路径,使用#include宏定义,包含要找的文件路径。

该文件在交叉编译器目录中,找到该文件,使用指令:find -name “stdio.h”(编译器默认的路径)

指定的头文件路径:

编译时 加上 -I <头文件路径>

2.调用函数

调用的函数在哪里调用?

默认的库文件默认路径:在交叉编译器的目录,使用指令:find -name lib

这个路径是库文件路径。

 

如何指定的库文件路径?

编译时 -L <库文件路径>,用来库目录

编译时 -Iabc 这样的选项,用来指定库文件libabc.so文件。

Gcc大概使用

一个c文件如何被gcc使用。

一个c文件需要经过预处理(preprocessing),编译(compilation),汇编(assembly),链接(linking)。流程如下:

图 1 文件处理流程

例子:

gcc -E -o hello.i hello.c  //预处理步骤,生成.i文件

gcc -S -o hello.s hello.i  //编译步骤,生成.s文件

gcc -c -o hello.o hello.s  //汇编步骤,生成.o文件

gcc  -o hello hello.o    //链接步骤 生成可执行文件。

链接到库文件中的函数,链接包括两种:静态链接 动态连接。

Gcc编译选项

常用选项

描述

-E

预处理,开发过程中想快速确定某个宏可以使用“-E  -dM”

-c

把预处理、编译、汇编都做了,但是不链接

-o

指定输出文件

-I(大写i)

指定头文件目录

-L

指定链接时库文件目录

-l(小写l)

指定链接哪一个库文件

 

 

 

 

 

 

 

 

 

 

 

 

 

链接及动态库文件制作

gcc -c -o main.o main.c

gcc -c -o inc.o inc.c

gcc -shared -o libinc.so inc.o//生成动态链接库

gcc -o test main.o -linc -L/  //libinc.so所在目录

静态链接库文件

gcc -c -o main.o main.c

gcc -c -o inc.o inc.c

ar crs libinc.a inc.o //生成静态链接库

gcc -o test main.o libinc.a //指定静态文件的路径

gcc 警告选项

-Wall :打开警告开关,在编译的过程中,将编译的警报信息全部显示:

举例:gcc -Wall -o main main.c

gcc 链接器选项

链接器的使用情况,-llibrary

查看gcc编译过程

gcc -v -o test main.o inc.o

-v选项,显示整个编译过程

-nostartfiles

不链接系统标准启动文件,而标准库文件仍然使用:

gcc -v -nostartfiles -o test main.o inc.o

这样生成的文件无法执行

-nostdlib

不链接系统标准启动文件和标准库文件,只把指定的文件传递给链接器。

这个选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件。

gcc -v -nostdlib -o test main.o sub.o

在编译bootloader,内核时,用到的很多函数是自包含。

-static

静态链接,生成静态可执行文件:

gcc -o test_static main.o sub.o –static

静态生成文件的大小小于动态链接生成的文件数量

-shared

默认是动态链接,可以使用这些编译,生成链接库文件。

举例:

gcc -c -o sub.o sub.c   // 动态链接

gcc -shared -o libsub.so sub.o  // 生成动态链接库

gcc 目录选项

-Idir :在编译的时候,指定头文件的文件目录路径。

-Ldir :指定库文件的目录路径。

 

posted @ 2022-08-09 16:13  JwChu  阅读(628)  评论(0编辑  收藏  举报