将两个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一个适合作为ld
input的对象。
$ 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