在链接描述文件中提取存档文件

时间:2013-01-08 13:25:37

标签: c gcc ld ar linker-scripts

我正在尝试解决以下问题:

假设我有一个从以下位置创建的libxyz.a库:

/* main.c */
int main(void)
{
  int a;
}

编译并存档:

gcc -c main.c -o abc.o && ar cr libxyz.a abc.o

我如何编写链接描述文件以便将abc.o准确地放在预期的位置?

我试图以这种方式处理它:

/* script.ld */
SEARCH_DIR(.)
INPUT(-lxyz)
SECTIONS
{
   .text : { xyz:abc(.text) }
   .data : { xyz:abc(.data) }
   .bss  : { xyz:abc(.bss) }
}

但是在跑完之后:

ld -T script.ld

我明白了:

ld: cannot find xyz:abc

我找不到在论坛上的链接器文件中提取档案的任何示例。我发现的唯一的东西是链接器的文档,它只包含有关archive:file构造的信息。

2 个答案:

答案 0 :(得分:3)

今天不得不处理同样的问题,所以如果其他人碰到这个问题:一些文件扩展名丢失了。工作得很好:

SECTIONS
{
   .text : { libxyz.a:abc.o(.text) }
   .data : { libxyz.a:abc.o(.data) }
   .bss  : { libxyz.a:abc.o(.bss) }
}

还需要处理路径(如果库实际上是某个地方/ libxyz.a)。

答案 1 :(得分:0)

你的ld可能有问题,因为我在我的机器上尝试了你的脚本,它没有错误地正确运行。我的ld版本是GNU ld(GNU Binutils for Ubuntu)2.22