linux库概念及编程——面试(重点)

一、分文件编程

优点①功能责任划分②方便调试③主程序简洁

  • a.c
#include<stdio.h>//直接到/usr/include或/usr/local/include下找头文件
#include"b.h"//编译时会优先从当前路径下找
int main()
{
        int a=5,b=1000;
        printf("a=%d,b=%d\n",a,b);
        swap(&a,&b);
        printf("a=%d,b=%d\n",a,b);

        return 0;
}
  • b.c
void swap(int *a,int *b)
{
        int t=*a;
        *a=*b;
        *b=t;
}
  • b.h
void swap(int *a,int *b);//函数的声明

最后a.c和b.c一起编译

二、库分为静态库和动态库、共享库

  1. 静态库

     程序再执行之前(编译)就加载到里面去了
    
  • 优点:

     快,发布程序时无需提供静态库,因为已经再app中了
    
  • 缺点:

     太大,更新、部署、发布麻烦
    

①静态库的创建

gcc b.c -c //生成b.a文件
ar rcs libb.a b.o //b.o文件生成libb.a静态库文件

②静态库的编译,此例中的staticfile就是可执行文件

gcc a.c -lb -L ./ -o staticfile //-b:是要制定的静态库,库名砍头去尾,-L告诉gcc编译器去指定的路径找静态库,默认是从/usr/lib和/usr/local/lib去找。
  1. 动态库
    动态函数库同共享函数库是一个东西(在linux上叫共享对象库,文件后缀是.so,windows上叫动态加载函数库,文件后缀是.dll);
    libname.so.x.y.z,lib:固定代表共享库,name:共享库名称,so:固定后缀,x:主版本号,y:次版本号,z:发行版本号

    程序加载时动态(临时)加载到目标程序中去
    
  • 优点:

     程序升级简单
    
  • 缺点:

     加载速度慢,发布程序时需要提供依赖的动态库
    

①动态库的创建

gcc -shared -fpic b.c -o libb.so//将b.c生成动态库libb.so
说明:
	-shared:指定生成动态库
	-fpic:标准,fpic选项作用于编译阶段,用于生成目标文件,以生成位置无关的代码

②动态库的编译,与静态库一模一样

gcc a.c -lb -L ./ -o dylib

③动态库的运行
动态库在运行的时候还要找.so文件,而静态库在编译的时候就已经写入程序,

  • 方法一:将.so文件拷贝到/usr/lib里面去就可直接运行
  • 方法二:环境变量
    export LD_LIBRARY_PATH=“.so库的绝对路径”
    但这种方法只是临时的,换到其他目录就不行了,因此我们可以做一个shell
    脚本:
vi start.sh, 再写入export=LD_LIBRARY_PATH=".so库的绝对路径";
chmod +x start.sh//加入可执行权限
./start.sh//运行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值