gcc hello.c -o hello 生成hello可执行文件
gcc -c hello.c 生成目标文件(.o文件)
gcc -E hello.c > hello.i 生成预处理文件写入hello.i中
gcc -s hello.c 生成hello.s汇编文件
gcc -o hello.c 生成默认a.out可执行文件
gcc -O hello.c 生成默认a.out可执行文件,优化等级为1,O1,O2可替换
gcc -g 用于之后gdb调试
静态库:是在执行程序之前就已经加入到执行代码中,成为执行程序的一部分来执行的,后缀名:.a
动态库:是在执行程序启动时加载到执行代码中,后缀名:.so
静态库创建和使用步骤:
例如:main.c(执行主函数和输出加减乘除结果的函数),add.c(加函数),sub.c(减函数),mul.c(乘函数),div.c(除函数),main.h(包含四个函数头文件)
由于函数的默认返回值为整形,而div函数有时返回的是实数,所以要先声明函数,即在头文件中声明“”main.h“”即可。
add.c:
int add(int a,int b)
{
return a+b;
}
sub.c:
int sub(int a,int b)
{
return a-b;
}
mul.c:
int mul(int a,int b)
{
return a*b;
}
div.c:
float div(int a,int b)
{
return ((float)a)/b;
}
main.h:
extern int add(int,int);
extern int sub(int,int);
extern int mul(int,int);
extern float div(int,int);
main.c:
#include<stdio.h>
#include"main.h"
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d+%d=%d\n",a,b,add(a,b));
printf("%d-%d=%d\n",a,b,sub(a,b));
printf("%d*%d=%d\n",a,b,mul(a,b));
printf("%d/%d=%f\n",a,b,div(a,b));
return 0;
}
1.首先运行
gcc -c main.c main.h add.c sub.c mul.c div.c -o main
确保可执行生成main文件,./main运行文件。
2.然后运行下面代码,生成四个.o文件。
gcc -c add.c sub.c mul.c div.c
(不包含main函数文件的其他.c文件)。
3.创建静态库:创建abc静态库,格式为:lib+name+.a 并将所需的目标文件加入静态库
rc:静态库不存在,就创建该库文件
s:更新库文件
ar rcs libabc.a add.o sub.o mul.o div.o
4.若想对比,先删除以前的main文件,再编译文件
gcc main.c -o main -L. -labc (-I..)
-L 后面的是静态库的路径,-l后面的是静态库的名字,如果像main.h的头文件不在本层目录,则-I后面的是头文件的路径
则静态库完成搭建。
动态库的搭建和使用:
1.直接在本层目录下创建一个新的目录,将main.c复制进去。
2.创建动态库
gcc -shared -fPIC -o liabc.so 源文件
动态库名:li+name+.so 源文件即add.c之类的文件的位置(除main,c)
因为建库时源文件在上一层目录,所以都要加上../
编译时注意加上头文件main.h的位置,我的main.h在上一层即要加上-I..
动态库完成。