1. 什么是库文件?
    库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在/usr/include 下或其子目录下。
  2. 库的分类有哪些?
    库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so

态库的生成与使用

静态库的生成和使用

下面以max.c和add.c为例:

  1. 第一步,需要生成静态库文件.c文件,其中foo.h中时函数的声明,add.c和max.c是函数的定义
ls
add.c foo.h max.c
cat add.c      //cat可以显示小的代码块
int add(int x,int y)
{return x+y;
}
cat max.c
int max(int x,int y)
{return x>y?x:y;
}
cat foo.h
int add(int x,int y);
int max(intx,int y);
  1. 将需要的生成库文件的所有.c文件编译成.o文件
ls
add.c foo.h max.c
gcc -c add.c       //gcc -c将.c 文件编译成
gcc -c max.c
ls
add.c add.o foo.h max.c max.o
  1. 使用ar命令将编译好的.o问件生成静态库,其中c是创建库,r是将方法添加到库中,v是显示过程
ls
add.c add.o foo.h max.c max.o
ar crv libfoo.a add.o max.o            //生成静态库的命令
a - add.o
a - ma.o
ls
add.c add.o foo.h libfoo.a max.c max.o  //此时已经建好了静态库文件
gcc -o main main.c -L. -lfoo            //将所有程序所需要的.o文件连接好生成main文件
./main                                  //执行程序

共享库的生成和使用

下面以max.c和add.c为例:

  1. 第一步,需要生成静态库文件.c文件,其中foo.h中时函数的声明,add.c和max.c是函数的定义
ls
add.c foo.h max.c
cat add.c      //cat可以显示小的代码块
int add(int x,int y)
{return x+y;
}
cat max.c
int max(int x,int y)
{return x>y?x:y;
}
cat foo.h
int add(int x,int y);
int max(intx,int y);
  1. 将需要的生成库文件的所有.c文件编译成.o文件
ls
add.c foo.h max.c
gcc -c add.c       //gcc -c将.c 文件编译成
gcc -c max.c
ls
add.c add.o foo.h max.c max.o
  1. 使用gcc命令将第编译好的所有.o文件生成共享库
ls
add.c add.o foo.h max.c max.o
gcc -shared -fPIC -o libfoo.so add.o max.o  //共享文件库生成命令
ls
add.c add.o foo.h libfoo.so max.c max.o     //以.so结尾的是共享库
  1. 使用共享库“libfoo.so”和“main.c”生成可执行文件的过程,其中 -L 指定库的
    存储路径, -l 指定库的名称(不需要前面的‘lib’和扩展名‘.so’), 如果在库的存储路径
    有同名的共享库和静态库,gcc 默认使用共享库。
ls
add.c add.o foo.h libfoo.so max.c max.o  //此时已经建好了共享库文件
gcc -o main main.c -L. -lfoo
ls
add.c add.o foo.h libfoo.so main max.c max.o   //将所有程序所需要的.o文件连接好生成main文件
./main                                  //执行程序之后发现出错

因为系统默认只会去存储库的标准位置(/lib 或/usr/lib 等)加载,而不会在当前位置寻找。所以将库拷贝到
/usr/lib 下,再执行程序,就可以成功。需要切换到管理员模式。

cp libfoo.so /usr/lib

静态库和共享库的区别

  1. 静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做
    标记,在运行程序时,才动态加载。
  2. 静态库文件比较大,共享库比较小。
  3. 静态库调用函数需要重新将该方法包含到可执行程序中,共享库则只需要更快库文件。

Linux 系统上的库文件生成与使用相关推荐

  1. Linux系统上的库文件的生成与使用

    1.什么是库文件 库是一组预先编译好的方法的集合.Linux系统存储的库的位置一般在:/lib 和 /usr/lib. 在 64 位的系统上有些库也可能被存储在/usr/lib64 下.库的头文件一般 ...

  2. linux系统上传本地文件或文件夹

    linux系统上传本地文件或文件夹 一般将文件上传到linux服务器都会用一些shell工具,但是有些情况下还是需要掌握一下使用命令上传文件. 从服务器上下载文件 scp username@serve ...

  3. Linux系统中添加库文件路径的方法

    库文件在链接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用 ...

  4. linux 提示库文件,Linux系统下确实库文件的解决办法

    解决/usr/bin/ld: cannot find -lxxx 在linux环境编译应用程式或lib的source code时常常会出现如下的错误信息: •/usr/bin/ld: cannot f ...

  5. linux缺失库文件,Linux系统下确实库文件的解决办法

    解决/usr/bin/ld: cannot find -lxxx 在linux环境编译应用程式或lib的source code时常常会出现如下的错误信息: •/usr/bin/ld: cannot f ...

  6. 在Linux系统上运行.jnlp文件

    在Linux操作系统上执行/打开JNLP文件的方法,需要安装IcedTea-Web 安装IcedTea-Web #在Ubuntu/Ubuntu上安装: sudo apt -y install iced ...

  7. 怎么复制window上的内容到linux,怎样将文件从window系统复制到远程linux系统上

    怎样将文件从window系统复制到远程linux系统上 怎样将文件从window系统复制到linux系统上,其实有几种方法,好比,将windows上的文件共享出来,经过cifs协议mount到linu ...

  8. Linux系统上库文件的生成与使用(静态库和动态库)

    目录 1.什么是库文件? 2.静态库的生成与使用 2.1.生成 .o 文件 2.2.创建静态库 2.3.使用静态库 3.动态(共享)库的生成与使用 3.1.生成 .o 文件 3.2.生成动态库文件 3 ...

  9. Linux下的32位C程序,linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件...

    1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o 2.linux 系统c语言生成.so文件,----->gcc -sh ...

最新文章

  1. WPF中Auto与*的差别
  2. linux内核 semaphore,2.4内核里semaphore源码的一个疑问
  3. 阿里云推荐引擎使用教程
  4. 应运而生的web页面响应布局
  5. php 组装二维数组,php实现快速对二维数组某一列进行组装的方法小结
  6. Apache JMeter 启动
  7. 第八章 程序的分支结构
  8. 锁开销和上下文切换开销
  9. windows下编译可在visual studio中调试的FFmpeg
  10. 计算机鼠标双击怎么,电脑鼠标双击变成属性的解决方法
  11. Silverlight4_Tools安装异常
  12. 【成功实践篇】VirtualBoX虚拟机和本地共享存储目录
  13. 求字符串转化的最小操作次数 DP动态规划
  14. django 序列化组件Serializer
  15. VUE面试题-2022
  16. 原函数与反函数的关系
  17. 输入身份证号判断性别并求年龄
  18. netsh端口映射与端口转发
  19. 中国免疫抑制剂药物市场趋势报告、技术动态创新及市场预测
  20. Unable to start activity com.unionpay.uppay.PayActivity

热门文章

  1. Java_基础_01_static和final
  2. 【整合篇】Activiti业务与流程的整合
  3. 笔记 - Git使用
  4. GIT之git常用配置和操作
  5. 技术经理:别当超级英雄!
  6. 淘宝二面,面试官居然把TCP三次握手问的这么详细
  7. 闲鱼如何一招保证推荐流稳如泰山
  8. 19 条 MySQL 技巧,效率至少提高 3倍!
  9. 牛逼!原来分布式事务可以这样玩!
  10. 本地缓存性能之王Caffeine