我正在尝试处理如下问题:
假设我有一个库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