一个人如何将两个由GCC编译的.o目标文件合并到第三个.o文件中?$ gcc -c a.c -o a.o$ gcc -c b.c -o b.o$ ??? a.o b.o -o c.o$ gcc c.o other.o -o executable如果您有权访问源文件,则-combineGCC标志将在编译之前合并源文件:$ gcc -c -combine a.c b.c -o c.o但是,这仅适用于源文件,GCC不接受.o文件作为此命令的输入。通常,链接.o文件无法正常工作,因为您无法使用链接器的输出作为输入。结果是一个共享库,并且没有静态链接到生成的可执行文件中。$ gcc -shared a.o b.o -o c.o$ gcc c.o other.o -o executable$ ./executable./executable: error while loading shared libraries: c.o: cannot open shared object file: No such file or directory$ file c.oc.o: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped$ file a.oa.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
3 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
传递-relocatable或-r以ld将创建一个对象,它是适合作为输入ld。
$ ld -relocatable a.o b.o -o c.o
$ gcc c.o other.o -o executable
$ ./executable
生成的文件与原始.o文件的类型相同。
$ file a.o
a.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
$ file c.o
c.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
- 3 回答
- 0 关注
- 1414 浏览
添加回答
举报
0/150
提交
取消