gpt4 book ai didi

c - 用于编译的 GCC 链接库

转载 作者:IT王子 更新时间:2023-10-29 00:54:57 33 4
gpt4 key购买 nike

当信息已经以 #include 的形式存在于源文件中时,为什么我们必须告诉 gcc 要链接哪个库?

例如,如果我有一个使用线程的代码并且有:

#include <pthread.h>

我仍然需要在 gcc 中使用 -pthread 选项编译它:

gcc -pthread test.c

如果我不提供 -pthread 选项,它将在查找线程函数定义时出错。

我正在使用这个版本:

gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

最佳答案

这可能是 C 语言初学者最常犯的错误之一。

在 C 中,构建程序有两个不同的步骤,即编译和链接。出于您的问题的目的,这些步骤将您的代码连接到两种不同类型的文件、 header 和库。

#include <pthread.h> C 代码中的指令由编译器处理。编译器(实际上是预处理器)按字面意思粘贴了 pthread.h 的内容。在将 C 文件转换为目标文件之前将其写入您的代码。

pthread.h是头文件,不是库。它包含您可以在库中找到的函数列表、它们采用的参数以及它们返回的内容。 header 可以在没有库的情况下存在,反之亦然。 header 是一个文本文件,通常在 /usr/include 中找到在 Unix 衍生系统上。您可以像打开任何 C 文件一样打开它来阅读内容。

命令行gcc -lpthread test.c编译和链接。在过去,你首先会做类似 cc test.c 的事情。 , 然后 ld -lpthread test.o .如您所见,-lpthread实际上是链接器的一个选项。

链接器对诸如 C 代码或 header 之类的文本文件一无所知。它仅适用于已编译的目标文件和现有库。 -l标志告诉它要查看哪些库以查找您正在使用的函数。

关于c - 用于编译的 GCC 链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35299711/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com