GCC – 常用手动链接选项-lz、-lrt、-lm、-lc、-lpthread、-lcrypt、dl链接都是什么库?
1 GCC的-l选项,手动添加链接库
GCC在编译代码时,可以使用-l
手动添加链接库,比如说有以下代码main.c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double param, result;
param = 60.0;
result = cos ( param * PI / 180.0 );
printf ("The cosine of %f degrees is %f.\n", param, result );
return 0;
}
直接使用gcc编译会出现cos
未定义的链接错误,无法找到cos
这个函数
gcc main.c
#出现以下错误
/tmp/ccYfkZJk.o: In function `main':
main.c:(.text+0x34): undefined reference to `cos'
collect2: ld returned 1 exit status
标准头库文件math.h对应的数学库默认也不会被链接,如果没有手动将它添加进来,就会发生函数未定义错误。
对于上述问题,必须手动链接数学库m
,修改编译命令如下
gcc main.c -o main.out -lm
数学库的文件名是libm.a,前缀lib
和后缀.a
是标准的,m
是数学库的名称,GCC 会在-l
选项后紧跟着的基本名称的基础上自动添加这些前缀、后缀,本例中,基本名称为 m。
2 GCC中常用手动链接选项-lz、-lrt、-lm、-lc、-lpthread、-lcrypt、dl链接都是什么库?
- -lz:手动链接压缩库libz
- -lrt:手动链接实时库librt。这个库包括异步I / O,消息队列,进程调度,实时信号扩展,信号量,共享内存对象,同步I / O和定时器选项下定义的接口。
- -lm:手动链接数学库libm,libm库是Linux系统中的一种数学库文件,它提供了各种数学函数,例如三角函数、指数函数、对数函数以及一些高级数学函数等等。
- -lc:手动链接标准c库libc,libc库是Linux系统中最基础的库文件,它包含了各种C语言库函数以及一些系统级的API。这个库文件提供了Linux系统中最常用的函数,例如字符串操作、IO操作、数学函数等等,也是其他库文件的基础。
- -lpthread:手动链接多线程库pthread,用到多线程需要链接,包括在linux上使用
std::thread
也需要链接。libpthread库是Linux系统中的线程库文件,它提供了各种线程相关的API函数。使用这个库可以在Linux系统中创建多线程程序,实现程序并发执行,提高程序运行效率。 - -lcrypt:手动链接加密库libcrypt。libcrypt库是Linux系统中的一个加密库文件,可以提供各种加密算法,例如DES、SHA等等。使用这个库可以实现对数据的加密和解密,保证数据的安全性。
- dl:显式加载动态库的
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:GCC – 常用手动链接选项-lz、-lrt、-lm、-lc、-lpthread、-lcrypt、dl链接都是什么库?
原文链接:https://www.stubbornhuang.com/2788/
发布于:2023年09月06日 16:15:30
修改于:2023年09月06日 16:15:30
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50