2013-05-25 55 views
2

我想在其內存部分末尾放置一個特定變量。如何在節的末尾放置變量(使用GCC)

所以,如果我有:

file1.cpp:

__attribute__((section(".mysection"))) char var1[] = "var1"; 

而在另一個file2.cpp:

__attribute__((section(".mysection"))) char var2[] = "var2"; 

我怎麼能強迫var2是在mysection末?

回答

0

您必須在鏈接器命令文件中創建您自己的部分,並將您的部分正確放置在鏈接器命令文件中的變量部分。

對於大多數連接器,不能告訴它確切變量的順序。更簡單的解決方案是爲每個變量創建一個部分,並告訴鏈接器您要如何訂購這些部分。

查找GNU編譯器集合的鏈接器命令文件的確切語法。

3

好吧,我最終採取了完全不同的方法,但我想在這裏分享我的最終結論: 我的依據是How to fetch the end address of my code

在代碼中,你必須添加一個的extern參考變量:

extern char var2[]; 

一個鏈接腳本必須寫成如下:

SECTIONS 
{ 
    .mysection : { 
     *(.mysection); 
     var2 = .; 
    } 
} 
INSERT AFTER .mysection 

在鏈接期間添加鏈接描述文件(例如,ld -T <PATH_TO_MY_LINKER_SCRIPT>) 使用INSERT AFTER部分,以便將鏈接描述文件添加到默認鏈接描述文件。

我不得不使用'gold'來鏈接我的elf文件,顯然我使用的版本不支持'INSERT AFTER'語法。所以實際的解決方案應該是複製默認的鏈接器腳本,並將我的腳本信息添加到它。

雖然我還沒有測試過,但我仍然希望它能幫助別人。