gcc编程

gcc编程的过程:

 

# gcc -E main.c -o main.i   //预处理,-o 定义生成的文件名

# gcc -S main.c -o main.s  //编译

# gcc -c main.c -o main.o  //汇编

# gcc main.o -o hello      //链接  生成可执行文件

 

通常我们在gcc编程的时候,直接使用 #gcc main.c-o hello一条命令完成了以上的工作,但是实际上整个过程是有上边四个过程的,我们经常用的还有生成*.o文件,下面

会说到。

如果我们在编译时需要的头文件不再当前目录,那么直接编译会报错,因为他首先会在当前路径下找头文件,这时候就要加上文件路径,

# gcc -c ./head/head.c main.c -o test -I ./head     -I表示他会在那个目录下面找头文件,相当于说明了两次头文件的位置

 

 

关于库文件,有两类,分为动态库和静态库,动态库在Windows和linux下面的形式分别为 *.dll 和 *.so,静态库分别为 *.lib 和  *.a;

 

库文件可以结合头文件*.h来执行,这样就可以在一些不想开源的场合将源文件*.c做成库文件,就可以隐藏了源码。

 

这里(这是一个链接)还有一些gcc编程的应用举例,是当时的一个作业

 

 

在linux下生成动态和静态库

 

静态库:

 

 #gcc -c *.c *.c main.c   //将*.c文件处理为*.o文件

 

 # arcr libname.a *.o *.o

/*生成静态库的命令,lib是前缀,name是库文件名,后面是这个库文件所依赖的文件,也就是库依赖,一般就是第一步生成得*.o文件

 

# gcc -o file_name main.o libname.a

# gcc -o file_name main.c -L. -lname/*生成可执行文件file_name的命令,第二条后面的-lname中,l代表lib,name就是定义的静态库的name, -L加路径,表示库文件

所在路径,这里的 . 也就是当前路径*/     动态库

 

 #gcc -c *.c *.c main.c   //将*.c文件处理为*.o文件

# gcc -shared -fPCI -o libname.so *.o *.o

//生成分享库,也就是动态库

  #gcc -o file_name main.c -L. -lname

//生成可执行文件

 

同样是生成了可执行文件,不同的是,静态库生成的可以直接在当前路径下运行,但是动态库不行,将动态库文件移动到系统库中,也就是lib文件夹(64位系统为lib64),

再执行就可以运行。

ldd + 可执行文件名   可以看到库的依赖

 

另外几种常用命令

 gcc编程_第1张图片

 gcc编程_第2张图片

 应用举例:

gcc编程_第3张图片

gcc编程_第4张图片

你可能感兴趣的:(linux学习)