【问题标题】:Making relocatable object with gcc causes "cannot find -lgcc_s" error使用 gcc 制作可重定位对象会导致“找不到 -lgcc_s”错误
【发布时间】: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 是否有效。
  • 您的通用解决方案必须根据扩展名选择程序选项。也可以选择程序本身。 gccldgcc -shared 不同。

标签: gcc linker ld


【解决方案1】:

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

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

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

【讨论】:

  • -nostartfiles 选项也可能有用。
猜你喜欢
  • 2014-04-13
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多