目标文件和静态库(存档文件)之间有什么区别?

com*_*fan 23 object archive

似乎存档文件可以从目标文件生成:

ar rvs libprofile.a profile.o
Run Code Online (Sandbox Code Playgroud)

目标文件和存档文件之间有什么区别?

在我看来,两者都可以直接与gcc一起使用,例如:

gcc *.c profile.o 要么 gcc *.c libprofile.a

有什么不同?

小智 15

静态库是一个或多个目标文件的集合,具有允许快速搜索的索引.编译器处理它们的方式有一些细微的差别.使用对象文件,您可以这样链接:

gcc f1.o f2.o -o myexe
Run Code Online (Sandbox Code Playgroud)

有了库,你也可以这样做:

gcc f1.o libf2.a -o myexe
Run Code Online (Sandbox Code Playgroud)

或者您可以使用速记:

gcc d1.o -lf2 -L. -o myexe
Run Code Online (Sandbox Code Playgroud)

此外,gcc将始终链接.o文件,但如果尚未解析未定义的名称,它将只搜索库并从中链接.