惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy International News Feed
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
Vercel News
Vercel News
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
I
InfoQ
Y
Y Combinator Blog
月光博客
月光博客
小众软件
小众软件
有赞技术团队
有赞技术团队
A
About on SuperTechFans
U
Unit 42
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
G
Google Developers Blog
V
V2EX
V
V2EX - 技术
Forbes - Security
Forbes - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
GbyAI
GbyAI
The Cloudflare Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
M
MIT News - Artificial intelligence
量子位
Microsoft Security Blog
Microsoft Security Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园_首页
Recorded Future
Recorded Future
F
Full Disclosure
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cyberwarzone
Cyberwarzone
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
PCI Perspectives
PCI Perspectives
H
Hacker News: Front Page
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

C

各位大佬, C 語言該怎麼練習啊 分享一个代码优化导致的死循环 人再笨还能写不出内存安全的 C? 想念 C C11 的 _Generic,现实当中用得多不多?(尤其是公司项目) 坑爹的 GBK:大家都应该去用 UTF-8 分享一个用 AI 学习 C 语言的例子 一个简单的 C 程序,但是不明白区别在哪里 我这段 C 代码可以在编译时候输出结构体的大小,你们还有什么好点子, show me the code! 这段话是否正确?「取余这个运算,只有 Python 是对的。当初 C 这个老师教错了,那么一大票学生也就只敢跟着老师错。只有 Python 敢于站出来坚持正确答案。」 C 中可变参数如何直接传递到 printf() C 的内存打印实现 函数能否实现透传不定长度参数,最终由 printf 打印 请大佬帮忙修改一份 elf 文件里的数值 Linux 上 C 的程序遇到个异常退出问题,局部变量大小有限制?? C 语言新手求助:如何在 vscode 中使用第三方库? 将资源嵌入到可执行文件中并保持目录结构 一个简单实用的 C 工程示例, 附简洁的 Makefile 关于 C 语言的相关问题 轮子更新: C/C++ 跨平台小工具库 为什么下列程序进行的是无符号乘法? 用 riscv64- Linux -gnu-gcc 编译的 c 文件为啥能在 x8664 下运行? char *s = "0123"和 char s[] = "0123"的区别 有人能完整地解释一下 int (*daytab) [13]和 int *daytab[13]吗 在 c 语言中, int a;是 declaration 还是 definition 一个简单(奇怪)的 C 语言问题 c 语言中打印指针的值打印的是 OS 分配的虚拟地址的值吗?要怎么知道 OS 给这个 c 程序进程分配的虚拟地址的大小呢? gcc 是怎么找到 system 函数的定义(实现)的? 用 C 实现轻量级表达式完成策略定制化和模板内容生成 c 语言是如何给汉字编码的? 开源 C 库 bfdev: MPI 大数运算 C 语言中的面向切面编程(AOP) 网络语言污染/扭曲专业术语名词——《为什么 c 语言这么抽象?》 C 语言函数资源开销可观测性 C 语言用户态函数可观测性 在 C 中,如何正确拷贝字符串 c 语言中自定义 section 段问题请教 C 语言的源码过滤功能的工具 求助 libcurl 的 curl_easy_pause() 使用方法 各位有什么深入了解 C 语言的书嘛? 不熟悉 cmake,请教一下多模块项目的 cmake 写法 大家有没有值得推荐的 c 语言的开源项目,用来学习或者贡献的。 求帮忙看一下这个 C 代码为什么会段错误! int 型返回值所能表达的内容极限 刚刚突然感受到了 C 语言指针的神奇之处 开源 C 语言库 Melon 之模块选择性编译 这年头搞 c 还有前途吗 看看我的 leetcode 第 151 题目 反转字符串 百变开源 C 语言库日志模块 最好用的 C 语言 JSON 解析器
还是不太理解 C 静态库和动态库?
nnegier · 2024-03-10 · via C
mylovesaber

20

mylovesaber      2024 年 3 月 10 日

楼上说法太专业,理解所需知识储备下限很可能高于楼主知识积累的上限,用一种低俗但可能比较直观的说法来解释吧:

公猪配种这词你听说过吧?自然交配公猪比例为每 15 ~ 20 头母猪准备 1 头公猪。想要 20 头母猪怀孕,需要的是公猪的精子。而公猪本身就是储存精子的容器(库)
那么这个公猪就是动态库,有公猪的情况下,母猪就是程序。

母猪想怀孕,就会在排卵期去叫公猪过来上她(程序调用了动态库)。

而养猪场配比上面提到了,想要 20 头母猪怀孕,不需要准备 20 头公猪,而是让一头公猪的精液平分 20 份给到母猪即可(或者说是让公猪对着 20 头母猪依次上一遍):
从母猪角度来说,多个母猪实际上是共享了一头公猪;
从公猪角度来说,就是公猪是共享猪,可以由多头母猪共享(动态库是共享库,可以由多个程序共享)

为啥 20 头母猪共享一头公猪?因为一头公猪就能完成对 20 头母猪的配种任务,就没必要准备 20 头公猪来 1v1 ,因为养 20 头公猪所消耗的猪饲料是 20 份,养一头公猪所需猪饲料只需 1 份,这样就可以节省存放饲料所占用的仓库空间(动态库可以由多个程序共享节省空间)

母猪配种一般是季节性的,就是每年都有几轮集中性配种,其他时间没有配种任务,就用不着公猪了(动态库只有用到的时候才会加载)

如果天生异象,出现了一头变异猪,雌雄同体,那么配种这事情它一头猪就可以完成,不需要让其他公猪跟她配对,那么这个变异猪的公猪身体结构的部分就是静态库,这头猪整体就是个静态程序

综上所述,类比一下,c 程序是猪,如果是静态编译,那这就是头变异猪,否则就是个母猪,至于你知道如何调用这些公猪母猪,那你就是养猪场老板,关系能明白了吗?

WuSiYu

36

WuSiYu      2024 年 3 月 11 日   ❤️ 1

主要是如今除开系统都会带的那些库,对于很多 windows 、mac 应用乃至 android app 而言,其实没有共享不共享的区别,因为他们都会随着安装包带着自己的一堆动态库,每个程序的所有文件是放在一起的,相互间很少会引用,无非是分成多个文件和集成到一个文件的区别
但对于 linux 下,用包管理器装一个软件,你会发现这个软件是打散放置在根目录下的,所有的动态库(.so )基本都会放在/lib 、/usr/lib 这种地方,在系统的标准路径里,那么其他程序也就可以用这些库,比如 debian 下 ttyd 依赖 libjson-c5 ,另一个别的软件包也会依赖 libjson-c5 ,那么此时 libjson-c.so.5 就只用存一个,这两个软件包共享这个动态库,同时运行的话在内存里也可以只加载一份,这样自然是更高效的,但必须要有一个统一的软件源(对于每个 linux 发行版而言),每个应用都得由软件源的维护者人工填好这些依赖信息,否则就没法保证你需要的这个库系统里有

xwwsxp

39

xwwsxp      2024 年 3 月 11 日

静态库,就是将所有东西都打包到一起,带来的问题就是文件膨胀;也有好处,不太容易出现启动失败;
但是,动态库,可以参考 win 的 dll 设计了,Linux 中就是 so ,动态链接库,就是将相同功能的东西放到固定的目录,这样对于软件开发者来说,打包就没有静态库那么大;但是,一旦动态库或动态链接库出现丢失,可能很多软件就跑不了。
不过,静态库和动态库,一般都是针对 C 或 C++ 等项目;对于 Java 而言,压根不存在~