将两个GCC编译的.o目标文件组合成第三个.o文件

如何将两个GCC编译的.o目标文件合并到第三个.o文件中?

$ gcc -c ac -o ao $ gcc -c bc -o bo $ ??? ao bo -o co $ gcc co other.o -o executable 

如果有权访问源文件, -combine GCC标志将在编译之前合并源文件:

 $ gcc -c -combine ac bc -o co 

但是,这只适用于源文件,并且GCC不接受.o文件作为此命令的input。

通常情况下,链接.o文件无法正常工作,因为您无法使用链接器的输出作为input。 结果是一个共享库,并没有静态链接到生成的可执行文件。

 $ gcc -shared ao bo -o co $ gcc co other.o -o executable $ ./executable ./executable: error while loading shared libraries: co: cannot open shared object file: No such file or directory $ file co co: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped $ file ao ao: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped 

-r (或--relocatable )传递给ld将创build一个适合作为ldinput的对象。

 $ ld -r ao bo -o co $ gcc co other.o -o executable $ ./executable 

生成的文件与原始.o文件的types相同。

 $ file ao ao: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped $ file co co: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped 

如果要创build两个或多个.o文件(即静态库)的存档,请使用ar命令:

 ar rvs mylib.a file1.o file2.o