在linux下制作静态库和动态链接库的方法

简介: 在linux下制作静态库和动态链接库的方法

静态库 .o文件的集合

 制作

ar -cr libxxx.a  xxx1.o xxx2.o xxx3.o ...

 编译

gcc main.c -l xxx [-L 库路径] (如果不加-L则在标准库路径下查找)

 运行

./a.out

基本概念:

静态库又称为文档文件(Archive File)。它是多个.o文件的集合。Linux中静态库文件的后缀为"a"。

静态库的代码在编译时就已经链接到应用程序中

静态库中的各个成员(.o文件)没有特殊的存在格式,仅仅是一个.o文件的集合。

使用"ar"工具维护和管理静态库

 

ar的三个参数中:r代表将文件插入归档文件中,c代表建立归档文件,s代表若归档文件中包含了对象模式,可利用此参数建立备存文件的符号表。

lib和.a都是系统指定的静态库文件的固定格式,mylib才是静态库的名称,

编译时,链接器会在标准路径(/usr/lib;/lib)或者用户指定的路径下去找.a的文件。

gcc -o main main.c -static -L. –lmylib

-static指定编译器链接静态库,-L.指定静态库的路径为当前路径,

在gcc编译器中引用可搜索到的目录和库文件时需用(-l+库名),

如在gcc中加入-lm可以在程序汇中链接标准算术库,加上-lpthread可以链接到linux标准线程库

 

总结:

   使用静态库可以使程序不依赖于任何其他库而独立运行,但是会占用很多内存空间以及磁盘空间,

   而且如果库文件更新,则需重新编译源代码,使用起来不够灵活.其实,编译的时候不需要加-static,

   直接用gcc -o main main.c -L. –lmylib,连接器会为我们链接指定的静态库以及标准C的共享库。

 

============================================

动态库 并不包含在可执行文件中 在执行时才加载动态库

 制作  

gcc -shared -fPIC xxx.c -o libxxx.so

 编译

gcc main.c -l xxx [-L 编译时库路径]

 临时指定运行时的库查找路径  

[LD_LIBRARY_PATH=(运行时库路径)] ./a.out

           如果不指定则在标准路径下找

 当你发布库要标准路径“/usr/lib  或 /lib”就不需要其它操作,但

 gcc 时一定要加“-l”指定的库名

 

永久修改运行时的库查找路径

/etc/ld.so.conf   修改连接器的配置文件
ldconfig          使配置文件生效

3、编译参数解析

最主要的是GCC命令行的一个选项:

     -shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件

 

    -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

 

    -L.:表示要连接的库在当前目录中

 

    -ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称

 

    LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。

 

    当然如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,

    不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方法了。

目录
相关文章
|
1月前
|
Ubuntu Linux 网络安全
在Linux上安装软件有多种方法
在Linux上安装软件有多种方法
107 64
|
16天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
38 2
|
22天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
24 1
|
22天前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
61 1
|
30天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
82 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Linux 数据安全/隐私保护 索引
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
42 1
|
1月前
|
监控 安全 Linux
使用NRPE和Nagios监控Linux系统资源的方法
通过遵循以上步骤,可以有效地使用NRPE和Nagios监控Linux系统资源,确保系统运行稳定,并及时响应任何潜在的问题。这种方法提供了高度的可定制性和灵活性,适用于从小型环境到大型分布式系统的各种监控需求。
44 2
|
2月前
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
35 0
|
3月前
|
Ubuntu Linux 虚拟化
安装Windows Linux 子系统的方法:适用于windows 11 版本
本文提供了在Windows 11系统上安装Linux子系统(WSL)的详细步骤,包括启用子系统和虚拟化功能、从Microsoft Store安装Linux发行版、设置WSL默认版本、安装WSL2补丁,以及完成Ubuntu的首次安装设置。
882 2
|
3月前
|
Linux 开发工具 文件存储
Linux修改主机名的两种方法
Linux修改主机名的两种方法
46 0

热门文章

最新文章