C语言 在链接器脚本中提取存档文件



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

假设我有一个库libxyz。创建自:

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

编译和归档:

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

我如何写链接器脚本,以便把abc。确切地说,它应该在哪里?

我正试图用这样的方式处理它:

/* 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构建的信息。

今天刚刚遇到了同样的问题,所以如果有人碰到这个问题:一些文件扩展名丢失了。像这样就可以了:

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

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

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

相关内容

  • 没有找到相关文章

最新更新