我知道,这些是一些常见的/基本的图书馆,但它们究竟意味着什么?
例如,我知道, -lm
是一些math库,但这是标准的math库还是什么?
-lz
压缩? 什么压缩?
我不知道这个是什么 – – -lrt
。
有人可以指定这些东西:
<cmath>
或<math.h>
时,我们使用的是相同的吗? -lz
– 是zlib, -lz
-lm
– 是你制定的数学库(实现定义AFAIK) -lrt
– 提供POSIX实时扩展: http : -lrt
-lz链接到zlib ,-lm链接到数学 ,-lrt链接到实时扩展库。
libm http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/libm.html
libz http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/libzman.html
librt http://www.rdg.ac.uk:8081/cgi-bin/cgiwrap/wsi14/poplog/man/3LIB/librt
所有这些都是标准的C afaik,可能包含在libstdc ++中(你的问题被标记为C ++)。
开关-lX通常意味着加载库libX.so.
libm是标准的数学库; 它包含sin(),cos(),atanh(),所有这些好东西。
libz是Zlib,一个压缩库,可以做gzip,deflate和其他一些格式。
有一些不同的librt在那里:一个是POSIX实时扩展; 另一个是通用编程辅助工具库。
上面的答案都是正确的。 我要补充的一点是,自己是C新手,是-l
参数告诉编译器把你的代码和一些库链接起来。
对我和其他人来说可能是混淆的,那就是在调用-l
加上lib的名字时没有空格。 所以-lz
,你链接到“z”
请注意,这些库已安装在您的系统中。 要么他们与您正在使用的发行版一起,要么使用软件包管理器make install
,要么从源代码make
编译( make
, make install
…)。 由于这些都是非常基础的(和旧的)图书馆APIS,所以它们的名字很短。 当你在你的系统中进行并安装特定的库时,你会在这里看到更多详细的名字。