news 2026/10/14 14:49:16

Linux静态库与共享库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux静态库与共享库

库:预先编译好的方法的集合

静态库libxx.a

原理:把要用的方法赋值一遍,所以删除之后不会影响

头文件:库函数的声明;位置:/usr/include/stdio.h

库文件:库函数的实现

构建库:

gcc -c add.c;

gcc -c max.c;

ar crv libfoo.a add.o max.o(库名:foo)

构建可执行程序:gcc -o main main.c -L. -lfoo(.表示当前位置,库和可执行程序在同一路径下)

共享库libxx.so

Windows叫动态链接库.dll

原理:没有拷贝要用到方法,只是做一个标记说明要用,所以删除后不能继续运行

ldd main(一个可执行程序):查看main函数运用了哪些共享库(add.o:···;max.o:···)

构建库:

gcc -c add.c;

gcc -c max.c;

gcc -shared -FPIC -o libfoo.h max.o add.o(add.c、max.c替换add.o、max.o也可以)

构建可执行程序:gcc -o main main.c -L. -lfoo

构建可执行程序时指定了当前位置是给gcc说明,但是main函数执行时仍要找共享库,只有放在标准位置下才能找到,所以要移动共享库到标准位置下:切换管理员(标准位置都已经偏离家目录了,要修改)移动:mv libfoo.so /lib

放到标准位置下之后,gcc -o main main.c -lfoo 不指定路径也可以通过

注(了解):如果库不在标准位置下,也可以通过设置环境变量”LD_LIBRARY_PATH”来指定可执行程序链接库文件的位置。

终端执行代码:

LD_LIBRARY_PATH=.("."代表可执行程序链接库文件的位置为当前位置)

export LD_LIBRARY_PATH

函数实现:gcc -o main main.c -lfoo

静态库和共享库的区别

gcc -o main main.c -L. -lfoo 在同一个位置(标准位置或当前位置)的情况下优先选择共享库

L+路径(.:当前路径) l+库名

静态库:主函数中所调用的方法的实现会在编译时在主函数中拷贝一份;删除库文件,main可以正常运行

共享库:共享库中没有包含(拷贝)用到的库方法,只能做标记,运行程序时动态链接;删除文件,main无法执行;ldd查看可执行程序用到哪些共享库

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 14:48:01

ClickStack 2026年1月版:实时协作与AI开发增强解析

1. ClickStack 2026年1月版核心更新解析作为持续跟踪ClickStack技术栈的开发者,刚体验完2026年1月版本更新后,必须说这次迭代在性能优化和开发体验上带来了显著提升。这个面向全栈开发者的低代码平台,本月重点强化了实时协作、AI辅助和云原生…

作者头像 李华
网站建设 2026/10/14 14:47:41

T3 Stack实战:从零构建类型安全的短链接全栈应用

那段时间我特别烦一件事:手上的短链接需求明明逻辑很简单,却要在 Next.js 里自己搭接口、写类型定义,前端再手搓一套对应的请求函数。改一个字段,前后端类型对不上,跑起来才报错。后来我重新开了个项目,代号…

作者头像 李华
网站建设 2026/10/14 14:46:38

现代C++库设计:值语义与类型擦除的实践指南

1. 为什么我们需要重新思考C库设计十年前我刚参与一个大型C项目时,被代码库的状态震惊了——到处是裸露的new/delete、难以追踪的生命周期、接口参数五花八门。更可怕的是,修改某个"工具类"会导致十几处看似无关的模块崩溃。这就是典型的"…

作者头像 李华
网站建设 2026/10/14 14:46:25

AI Agent触达网关Agent-Reach:解决消息投递最后一公里难题

如果你做过AI Agent相关的东西,大概率经历过这种微妙的不爽:模型推理跑通了,工具调用也稳定了,大模型在周报里写出了漂亮的分析结论,但最后一步——把结论送到该看的人手里——却卡住了。手动复制粘贴、手动群里的人、…

作者头像 李华