16.4. 在 GCC 中使用静态库
静态库可用作包含对象文件的存档。链接后,它们将成为生成的可执行文件的一部分。
由于各种原因,红帽不建议使用静态链接。请参阅 第 16.2 节 “静态和动态链接”。仅在需要时才使用静态链接,特别是红帽提供的库。
先决条件
- GCC 已安装在您的系统中
- 了解静态和动态链接
- 组成有效程序的一组源或对象文件,需要一些静态库 foo,且没有其他库
-
foo 库作为
libfoo.a
文件提供,不提供用于动态链接的文件libfoo.so
。
大多数作为 Red Hat Enterprise Linux 一部分的库都只支持动态链接。以下步骤仅适用于 没有为 动态链接启用的库。请参阅 第 16.6 节 “在 GCC 中使用 Both Static 和 Dynamic Libraries”。
步骤
要从源和对象文件中链接程序,请添加静态链接库 foo,名为 libfoo.a
:
- 更改到包含您代码的目录。
使用 foo 库的标头编译程序源文件:
$ gcc ... -Iheader_path -c ...
使用包含 foo 库的标头文件的目录路径替换 header_path。
将程序与 foo 库链接:
$ gcc ... -Llibrary_path -lfoo ...
使用包含文件
libfoo.a
的目录的路径替换 library_path。要执行该程序,请运行:
$ ./program
与 静态
链接相关的静态 GCC 选项禁止所有动态链接。相反,请使用 -Wl、-Bstatic
和 -Wl,-Bdynamic
选项更精确地控制链接器行为。请参阅 第 16.6 节 “在 GCC 中使用 Both Static 和 Dynamic Libraries”。