这两种文件类型有什么区别.我看到我的C++应用程序在构造可执行文件时链接了两种类型.
如何构建.a文件?链接,参考,尤其是示例,非常感谢.
.o
文件是对象.它们是编译器的输出和输入到链接器/库管理器.
.a
文件是档案.它们是对象组或静态库,也可以输入到链接器中.
其他内容
我没有注意到你问题的"例子"部分.通常,您将使用makefile生成静态库.
AR = ar CC = gcc objects := hello.o world.o libby.a: $(objects) $(AR) rcu $@ $(objects) %.o: %.c $(CC) $(CFLAGS) -c $< -o $@
这将编译hello.c
并world.c
转换为对象,然后将它们存档到库中.根据平台的不同,您可能还需要运行一个名为的实用程序ranlib
来生成存档上的目录.
一个有趣的旁注:.a
文件在技术上是归档文件而不是库.它们类似于没有压缩的zip文件,尽管它们使用的是更旧的文件格式.由实用程序生成的目录ranlib
是使归档成为库的原因.Java归档文件(.jar
)的类似之处在于它们是具有Java归档程序创建的一些特殊目录结构的zip文件.
.o文件是编译单个编译单元(本质上是源代码文件,具有关联的头文件)的结果,而.a文件是打包为库的一个或多个.o文件.
D Shawley的答案很好,我只想补充几点,因为其他答案反映了对正在发生的事情的不完全理解.
请记住,存档文件(.a)不限于包含目标文件(.o).它们可能包含任意文件.通常不常用,但请参阅存档中嵌入的动态链接器依赖信息,以获取愚蠢的链接器技巧.
另请注意,目标文件(.o)不一定是单个编译单元的结果.可以将几个较小的目标文件部分链接到一个较大的文件中.
http://www.mihaiu.name/2002/library_development_linux/ - 在此页面中搜索"partial"
您可以使用从文件(目标文件)ar
创建.a
文件(静态库.o
)
详情man ar
请见.