libgcc,全称 GNU Compiler Collection 的运行时库 (GCC Runtime Library),是GCC编译器软件包的一部分,是一个可重定位库,用于提供编译时使用到的常用函数,例如长除法、整数乘法等。GCC不但是开发者开发软件的首选工具,同时也是编写操作系统和编译器的必备工具。
在GCC编译源代码生成二进制文件时,会包含一些无法被静态链接进可执行文件中的共享库。为了解决这个问题,GCC引入了一个特殊的选项“-static-libgcc”,将libgcc.a库一起链接到目标代码中。
libgcc 为 GCC 提供了一些基本的库函数,如文本输入、ISO C11 的“noreturn”特性支持、优化内置函数等。此外,它还提供了一些运行时函数,如处理数值分配、抛出自定义异常、内存操作等功能。
从编译器的角度来看,GCC 是指一组编译器。GCC 可以为 C、C++、Fortran 和 Ada 这些高级语言生成汇编语言和目标文件。为了保证程序运行所必需的运行时库的正确性和可靠性,GCC 不能将其静态链接到生成的二进制文件中。
因此,通过将 libgcc.a 库链接到目标代码中,确保编译好的程序与系统上已经存在的 libgcc 库兼容。此外,libgcc 还提供了其它一些功能,例如让程序抛出异常和其他错误,以及处理程序中未定义的函数等。
在 GCC 中链接 libgcc 有两种方法:静态链接和动态链接。在静态链接模式下,会将整个 libgcc.a 库链接到可执行文件中,而在动态链接模式下,则仅会链接必要的函数,减小了可执行文件的大小。
如果需要在程序中启用这些功能,可以通过使用特殊的编译选项。-fno-omit-frame-pointer 参数用于确保程序能生成调用链信息,以在处理异常时对程序进行跟踪。