GCC -lm -lz -lrt选项 - 它们是什么意思?

26

我知道这些是一些常见的/基础库,但它们确切地意味着什么?

例如,我知道-lm是某个数学库,但这是标准数学库还是其他数学库?

-lz是用于压缩的吗?压缩什么?

而我对-lrt毫无头绪。


这些东西是什么?

  • 数学库。它是否与我们包含<cmath><math.h>时使用的库相同?
  • 压缩库。这是什么意思?它提供了一些工具来压缩文件,还是帮助编译器/链接器做一些压缩操作?

回答你的第二个问题,压缩库提供了一些例程,你可以在你的应用程序中使用。假设你有一些数据缓冲区,在将其发送到网络之前,你想对其进行一些压缩 - 这个库提供了一个没有专利限制的操作系统压缩算法来完成这个任务。 - Nim
1
规范可能是 *为什么在C中必须链接数学库*? - Peter Mortensen
5个回答

29

文件名有命名规范吗?libz.so 的命名约定为 zlibm.so 的命名约定为 mlibrt.so 的命名约定为 rt 吗? - Peter Mortensen

6

开关-lX通常意味着加载库libX.so。

libm是标准数学库,包含sin(),cos(),atanh()等等好东西。

libz是Zlib,一个压缩库,可以进行gzip,deflate和其他一些格式。

有几个不同的librt:一个是POSIX实时扩展;另一个是通用编程辅助库。


1
那么,“math library”是我们使用的标准库,包括“cmath”(或“math.h”)吗? - Kiril Kirov
-l 也会加载扩展名为 lib 的库。-lA 可以加载 libA.so 或 libA.lib。 - Martin York
这个答案可能会有一个“学习钓鱼”的部分。 - Peter Mortensen

4

最后一个链接已被(有效地)破坏:“已失效。请求的资源在此服务器上不再可用,也没有转发地址。请删除所有对此资源的引用。” - Peter Mortensen
第二个链接似乎已经失效(超时)。是 sources.redhat.com 子域名的普遍问题吗?(redhat.com 可以正常工作吗?) - Peter Mortensen

2

据我所知,它们都是标准的 C 库,可能包含在 libstdc++ 中(您的问题标记为 C++)。


所有链接现在都失效了。 - nmz787

2
之前的回答都是正确的。作为一个C语言新手,我想补充一点,-l参数告诉编译器将你的代码与某个库链接起来。
对我和其他人可能感到困惑的是,在调用-l加上库名时没有空格。所以,-lz表示链接到“z”库。
请注意,这些库已安装在您的系统中。它们可能随着您使用的distribution一起提供,也可能是通过包管理器或源代码编译(makemake install等)安装的。
由于这些都是非常基本(而且古老)的库API,它们有非常短的名称。随着您在系统中安装特定库,您会看到更详细的名称标记了-l

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接