为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2019-11-27 10:01:37
一个人如何将两个由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


查看完整回答
反对 回复 2019-11-27
?
MYYA

TA贡献1868条经验 获得超4个赞

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


ar rvs mylib.a file1.o file2.o


查看完整回答
反对 回复 2019-11-27
?
弑天下

TA贡献1818条经验 获得超7个赞

警告: --relocatable似乎不太方便携带。Android NDK随附的ld只能识别-relocatable。如果您需要便携性,请坚持使用-r

查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 1242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信