2013-01-08 151 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