使用 gcc 制作可重定位对象会导致 "cannot find -lgcc_s" 错误

Making relocatable object with gcc causes "cannot find -lgcc_s" error

我正在尝试使用 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 link 可重定位目标文件,或者我不得不使用 ld 来做这个?

为了解决这个问题,-nostdlib选项也必须传递给gcc:

$ gcc -r -nostdlib a.o b.o -o c.o

我不确定,但似乎没有这个选项 gcc 试图 link 标准库到输出可重定位对象。