Linux 系统上的库文件生成与使用
- 什么是库文件?
库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在/usr/include 下或其子目录下。 - 库的分类有哪些?
库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so
态库的生成与使用
静态库的生成和使用
下面以max.c和add.c为例:
- 第一步,需要生成静态库文件.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);
- 将需要的生成库文件的所有.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
- 使用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为例:
- 第一步,需要生成静态库文件.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);
- 将需要的生成库文件的所有.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
- 使用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结尾的是共享库
- 使用共享库“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
静态库和共享库的区别
- 静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做
标记,在运行程序时,才动态加载。 - 静态库文件比较大,共享库比较小。
- 静态库调用函数需要重新将该方法包含到可执行程序中,共享库则只需要更快库文件。
Linux 系统上的库文件生成与使用相关推荐
- Linux系统上的库文件的生成与使用
1.什么是库文件 库是一组预先编译好的方法的集合.Linux系统存储的库的位置一般在:/lib 和 /usr/lib. 在 64 位的系统上有些库也可能被存储在/usr/lib64 下.库的头文件一般 ...
- linux系统上传本地文件或文件夹
linux系统上传本地文件或文件夹 一般将文件上传到linux服务器都会用一些shell工具,但是有些情况下还是需要掌握一下使用命令上传文件. 从服务器上下载文件 scp username@serve ...
- Linux系统中添加库文件路径的方法
库文件在链接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用 ...
- linux 提示库文件,Linux系统下确实库文件的解决办法
解决/usr/bin/ld: cannot find -lxxx 在linux环境编译应用程式或lib的source code时常常会出现如下的错误信息: •/usr/bin/ld: cannot f ...
- linux缺失库文件,Linux系统下确实库文件的解决办法
解决/usr/bin/ld: cannot find -lxxx 在linux环境编译应用程式或lib的source code时常常会出现如下的错误信息: •/usr/bin/ld: cannot f ...
- 在Linux系统上运行.jnlp文件
在Linux操作系统上执行/打开JNLP文件的方法,需要安装IcedTea-Web 安装IcedTea-Web #在Ubuntu/Ubuntu上安装: sudo apt -y install iced ...
- 怎么复制window上的内容到linux,怎样将文件从window系统复制到远程linux系统上
怎样将文件从window系统复制到远程linux系统上 怎样将文件从window系统复制到linux系统上,其实有几种方法,好比,将windows上的文件共享出来,经过cifs协议mount到linu ...
- Linux系统上库文件的生成与使用(静态库和动态库)
目录 1.什么是库文件? 2.静态库的生成与使用 2.1.生成 .o 文件 2.2.创建静态库 2.3.使用静态库 3.动态(共享)库的生成与使用 3.1.生成 .o 文件 3.2.生成动态库文件 3 ...
- 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 ...
最新文章
- WPF中Auto与*的差别
- linux内核 semaphore,2.4内核里semaphore源码的一个疑问
- 阿里云推荐引擎使用教程
- 应运而生的web页面响应布局
- php 组装二维数组,php实现快速对二维数组某一列进行组装的方法小结
- Apache JMeter 启动
- 第八章 程序的分支结构
- 锁开销和上下文切换开销
- windows下编译可在visual studio中调试的FFmpeg
- 计算机鼠标双击怎么,电脑鼠标双击变成属性的解决方法
- Silverlight4_Tools安装异常
- 【成功实践篇】VirtualBoX虚拟机和本地共享存储目录
- 求字符串转化的最小操作次数 DP动态规划
- django 序列化组件Serializer
- VUE面试题-2022
- 原函数与反函数的关系
- 输入身份证号判断性别并求年龄
- netsh端口映射与端口转发
- 中国免疫抑制剂药物市场趋势报告、技术动态创新及市场预测
- Unable to start activity com.unionpay.uppay.PayActivity