首先,所有库通常都被命名为 libxyz.a 哪里 xyz 是库的名称。
libxyz.a
xyz
其次,您尝试仅使用用于库的目标文件创建程序,并将其与自身链接。这当然行不通,因为图书馆没有 main 正常程序所需的功能。你必须创建另一个程序,并链接 那个 与图书馆。
main
喜欢
gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz
正如您在上面的命令行中看到的那样,我放置了库 持续 在命令行上。这是必需的,因为链接器以相反的顺序寻找依赖关系。
的 编辑: 强> 将静态库与其他库链接:您没有。静态库是完全独立的,如果它需要其他库本身才能工作,那么在编译实际程序时它们必须出现在命令行中。
例如,让我们说库 xyz 取决于标准的数学库(即 m 图书馆)。创建时,您无法与其“链接” xyz 库,因为你实际上没有 链接 静态库,您只需将一组目标文件放在一个存档中( ar 和 .a 扩展名用于存档)。当你构建需要的实际应用程序时 xyz 库你还需要链接任何库 xyz 需求:
m
ar
.a
gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz -lm