2

我正在尝试处理如下问题:

假设我有一个库 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构造的信息。

4

2 回答 2

3

今天刚要处理同样的问题,所以如果其他人碰到这个问题:缺少一些文件扩展名。类似的东西可以正常工作:

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

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

于 2014-01-08T09:45:24.863 回答
0

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

于 2013-01-08T13:53:07.427 回答