Linux编译动态库 静态库

Linux 编译生成库文件的命令
将 share.c 编译生成一个动态库

    gcc share.c -o libshared.so -shared -fPIC

将    static.c 编译生成一个静态库
    方式一:

        gcc -o static.o -c static.c
        ar -r libstatic.a  static.o    

    方式二:

        gcc -o static.o -c static.c -shared -fPIC
        ar -r libstatic.a  static.o    


    注:方式二有一定的好处:
        如果你的动态库 libshared.so 调用了 静态库 libstatic.a 里面的接口,
        那么你编译动态库的时候,会把静态库编译进动态库里面。
        gcc -o libshared.so share.c  -shared -fPIC -L./ -lstatic
        如果你的动态库 libshared.so 没有调用 静态库 libstatic.a 里面的接口,
        那么你即使编译动态库的时候加上静态库选项,静态库也不会被编译进去。
        如果你编译静态库时没有加  -shared -fPIC,那么你就无法把静态库编译到动态库里面
 

代码及验证方法如下:

/*************static.h*******************/
#include <stdio.h>

#define STATIC_LIB "this is static lib"
int static_lib(void);
int static_lib2(void);
/*************static.h*******************/


//static.c  
/*************static.c*******************/
#include <stdio.h>
#include "static.h"

int static_lib(void)
{
        printf(STATIC_LIB"\n");
        return 0;
}

int static_lib2(void)
{
        printf(STATIC_LIB"222222222\n");
        return 0;
}
/*************static.c*******************/


//share.h
/*************share.h*******************/
#include <stdio.h>

#define SHARE_LIB "this is share lib"
int share_lib(void);
/*************share.h*******************/


//share.c 
/*************share.c*******************/
#include <stdio.h>
#include "share.h"
#include "static.h"

int share_lib(void)
{
        printf(SHARE_LIB"\n");
        static_lib();        //调用静态库接口,这样可以把静态库编译到动态库里面来
        return 0;
}
/*************share.c*******************/


//main.c 
/*************main.c*******************/
#include <stdio.h>
#include "share.h"
#include "static.h"

int main(int argc, char *argv[])
{
        share_lib();        //调用动态库接口
        static_lib();        //调用静态库接口进行验证
        static_lib2();        //调用静态库接口进行验证
        return 0;
}
/*************main.c*******************/

/*
编译步骤:
编译生成静态库
gcc -o static.o -c static.c -shared -fPIC
ar -r libstatic.a  static.o	

编译生成动态库
gcc -o libshared.so share.c  -shared -fPIC -L./ -lstatic

编译生成main程序 这里只链接了动态库
gcc main.c -o main -L./ -lshared

配置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your_path

执行main程序
./main

程序输出 动态库里面和main程序里面都成功调用了静态库的接口
this is share lib
this is static lib
this is static lib
this is static lib222222222    //这里说明会把静态库全部编译进动态库里面

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

monkey_llll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值