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 + 可执行文件名 可以看到库的依赖
另外几种常用命令
应用举例: