2013-01-08 109 views
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构造的信息。

回答

3

今天刚要处理同样的问题,所以如果有人碰到这个问题:一些文件扩展名丢失。一些工作正常:

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

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

0

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

+0

好吧,我已经改变了LD版本。它不会引发错误,但'objdump -t a.out'仍然不会出现'main'符号 – nkdm