【问题标题】:How to make fake proxy Import library如何制作假代理导入库
【发布时间】:2018-05-09 01:40:49
【问题描述】:

我记得发现 *.a 库不包含任何对象,而是一个列表库(作为纯文本?),例如:-liconv -lm

这样当 gcc 遇到它时,两个库都会被搜索链接。

有这样的伎俩吗?很确定那时它可以工作,但我现在不知道如何做到。

【问题讨论】:

  • 您可能正在寻找libtool.la 文件!
  • 如果我记得该文件是系统库(由某人构建的编译器的一部分),因此那里没有 .la 文件。我直接针对 gcc 进行了测试,而不是通过 makefile/libtool

标签: c gcc ld binutils


【解决方案1】:

你的链接器来自 binutils 吗? binutils ld 支持 .a 文件为 implicit linker scripts:

如果您指定了链接器无法识别为目标文件或存档文件的链接器输入文件,它将尝试将该文件作为链接描述文件读取。如果文件不能被解析为链接脚本,链接器会报错。

链接脚本不必复杂,可以这么简单(glibc 的libc.so):

/* GNU ld script.  */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( …/libc.so.6 …/libc_nonshared.a AS_NEEDED ( …/ld-linux-x86-64.so.2 ) )

或者你也可以use INPUT to delegate things to ld:

如果您使用“INPUT (-lfile)”,ld 会将名称转换为libfile.a,与命令行参数“-l”一样。

【讨论】:

  • 是的,它是 binutils,但我不认为它是复杂的链接器脚本,我不记得收到过 treating as linker script 这样的奇怪消息。那时我的印象是“制作这个 lib 的人肯定欺骗了 gcc!”
  • 我认为您不会收到警告,而且链接器脚本实际上可能很短。所有这些部分放置的东西都是可选的。
  • 啊,你是对的,一定是这样,必须忘记这些消息
  • 它是单行文本 INPUT(-liconv -lm) 保存为 libxx.a!谢谢
猜你喜欢
  • 2022-06-22
  • 2022-10-25
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2013-11-22
相关资源
最近更新 更多