gcc动态链接库,静态链接库的使用

(一)gcc编译流程:


假设要编译的文件为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;
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值