gcc库混淆

时间:2010-12-31 16:45:43

标签: gcc

这些天我花了一些时间通过gcc内部。我找到了gcc为我们的程序提供支持的库集合。

libgcc(GCC运行时库)的用途是什么?我的意思是哪个库是该库最常用的功能? : - /

我发现有一个图书馆libiberty。我发现该库包含许多常用函数(我的意思是我使用的例程),包括allocaconcatcalloc。但我找不到与malloc和其他字符串例程类似的函数。因此,当我们包含< string.h >< alloc.h >时,头文件是否与两个不同的库链接?

我的概念并不好。 :(请帮忙..

2 个答案:

答案 0 :(得分:1)

libgcc包含可以解决硬件“限制”的辅助功能;例如,64位整数除法是x86(_32)上libgcc的一部分 - 臭名昭着的__udivdi3

答案 1 :(得分:0)

您可以将库视为可以在程序中使用的函数的实现,而无需为它们编写代码。例如:你使用'printf'函数,但你实际上并没有编写'printf'的代码。因此,简单来说,库是常用​​代码(或函数)的实现集合。

编译和链接程序时,根据链接选项,程序与其他库链接(静态或动态)。

了解静态和动态链接,了解更多详细信息并更好地理解库。

让我们举个例子:

#include <stdio.h>
#include <math.h>    // contains deceleration of sqrt function

int main ()
{
printf ("sqaure root of 4 is %d.", sqrt (4));
}

在此代码中,我们使用sqrt函数,但我们没有实现它。 现在,如果我们编译并将其链接到包含sqrt函数(数学库)定义的库,我们的代码将在运行时正常工作。

但是,如果您不想链接到数学库,则必须编写自己的函数来计算sqrt。

通过发出以下命令编译和链接数学库:

gcc file.c -lm

这里,-l用于提及我们要链接库 -lm告诉链接'm'(或数学)库。

有关详细信息,请参阅链接器。