【问题标题】:How to link a .a/.lib to a .elf如何将 .a/.lib 链接到 .elf
【发布时间】:2021-02-10 13:28:24
【问题描述】:

我有一个链接到多个 .a、.so 和 .lib 文件的 .elf 文件。现在我想将另一个 .lib 添加到同一个精灵。有没有办法做到这一点?

【问题讨论】:

  • 只需将库添加到链接器命令行即可。
  • 对,但是要使用什么标志?我正在使用这样的东西:xyz-link -o final.elf -whole-archive foo.lib bar.elf。这只会将 foo.lib 的内容添加到 final.elf 中,并且不会保留 bar.elf 的内容
  • 你不能像图书馆一样使用精灵。
  • 好的,那你能告诉我在这个场景中如何使用它吗?

标签: c linker shared-libraries elf


【解决方案1】:

我有一个 .elf 文件

那句话毫无意义。 ELF 文件有不同的种类:ET_DYN(共享库或 PIE 可执行文件)、ET_EXEC(可执行文件)、ET_REL(可重定位目标文件)、ET_CORE(核心转储)。

您可以通过运行file foo.elf 来确定您拥有哪种.elf

前两个被认为是“最终的”,不能对它们进行进一步的链接。显然你也不能重新链接core 文件。

现在我想为同一个精灵添加另一个 .lib。

听起来您有一个想要扩展的可执行文件。

这是不可能

更新:

我可以将 .lib 添加到可重定位的目标文件吗?

是的:与添加任何其他库的方式相同。如果原来的命令是:

xyz-link -o final.elf -whole-archive foo.lib

那么新命令将是:

xyz-link -o final.elf -whole-archive foo.lib bar.lib

【讨论】:

  • 我刚刚检查了它是一个共享库。 (类型:DYN(共享对象文件))。我想在这种情况下也无法进行进一步的链接?
  • @AnkurSharma 正确:ET_EXECET_DYN 都是“最终的”。
  • 我可以将 .lib 添加到可重定位的目标文件吗?如果是,怎么做?
猜你喜欢
  • 2011-09-19
  • 2012-06-18
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2011-09-28
  • 1970-01-01
  • 2011-09-04
相关资源
最近更新 更多