假设要编译的文件为hello1.c
1、预处理阶段(将C语言中的头文件加入到源文件中)
gcc -E hello1.c -o hello1.i
2、编译阶段
gcc -S hello1.i -o hello.s
3、汇编阶段
gcc -c hello.s -o hello.o
4、链接阶段
gcc hello.o -o hello
经过这些处理,就形成了可执行文件hello
运行方式 ./hello
(二)gcc下静态链接库的使用(具体代码在下面)
以 unsgn_pow.c以及test_pow.c 文件为例
1、gcc -c unsgn_pow.c
2、ar rcsv libpow.a unsgn_pow.o
将目标文件unsgn_pow.o 生成静态库libpow.a
3、gcc -o test_pow test_pow.c -L. -lpow
使用静态库-L表示使用库文件
. 点号表示使用当前目录下的库文件
4、调试方法:
./test_pow 2 10
(三)gcc动态链接库的使用
1、gcc -fPIC -Wall -c unsgn_pow.c
为动态链接库构造目标文件unsgn_pow.o
-Wall选项为允许gcc提供的所有的有用的报警信息
2、gcc -shared -o libpow.so unsgn_pow.o
用以创建的目标文件unsgn_pow.o来构造动态库文件libpow.so
3、编译主程序
gcc -o test_pow test_pow.c -L. -lpow
4、在使用可执行文件test_pow之前,必须注册动态库的路径名其方法有:
(1)、修改/etc/ld.so.conf //怎么改?
(2)、修改LD_LIBRARY_PATH环境变量 //怎么改?
(3)、直接将库文件复制到/lib下
(4)、直接将库文件复制到/usr/lib文件下
5、调试方法:
./test_pow 2 10
test_pow.c代码:
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char * argv[])
{
unsigned int x,y;
unsigned long long res;
if((argc<3)
||sscanf(argv[1],"%u",&x)!=1
||sscanf(argv[2],"%u",&y)!=1)
{
printf("usage: pow base expoent!\n");
exit(1);
}
res=unsgn_pow(x,y);
printf("\n%u ^ %u = %u \n",x,y,res);
exit(0);
}
//**********************************************************//
unsgn_pow.c文件代码
unsigned long long unsgn_pow(unsigned int x,unsigned int y)
{
unsigned long long res;
if(y==0)
{
res=1;
}
else if(y==1)
{
res=x;
}
else
{
res=x*unsgn_pow(x,y-1);
}
return res;
}