【发布时间】:2016-02-19 23:55:03
【问题描述】:
我正在尝试使用 gcc 创建一个可重定位的目标文件。我使用来自this post 的解决方案。该解决方案适用于 ld:
$ ld -r a.o b.o -o c.o
但是,当我尝试将它与 gcc 一起使用时,会发生以下错误:
$ gcc -r a.o b.o -o c.o
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
使用-Wl,-r 和-Wl,--relocatable 选项会得到相同的结果。
有没有办法将可重定位目标文件与 gcc 链接,或者我不得不使用 ld 来执行此操作?
【问题讨论】:
-
你需要告诉 gcc 不要使用任何标准库。坦率地说,我不明白这种需要。使用 ld,这就是它的用途。
-
我正在编写一个从目标文件集中生成输出文件的命令。我想让它通用,因此它可以根据输出文件扩展名生成可执行文件、共享库和可重定位对象。我使用 g++ 来制作可执行文件和共享库,也想用它来制作可重定位的对象。而且我不确定作为参数传递给我的命令的额外 gcc 标志对 ld 是否有效。
-
您的通用解决方案必须根据扩展名选择程序选项。也可以选择程序本身。
gcc与ld与gcc -shared不同。