我想在其內存部分末尾放置一個特定變量。如何在節的末尾放置變量(使用GCC)
所以,如果我有:
file1.cpp:
__attribute__((section(".mysection"))) char var1[] = "var1";
而在另一個file2.cpp:
__attribute__((section(".mysection"))) char var2[] = "var2";
我怎麼能強迫var2
是在mysection
末?
我想在其內存部分末尾放置一個特定變量。如何在節的末尾放置變量(使用GCC)
所以,如果我有:
file1.cpp:
__attribute__((section(".mysection"))) char var1[] = "var1";
而在另一個file2.cpp:
__attribute__((section(".mysection"))) char var2[] = "var2";
我怎麼能強迫var2
是在mysection
末?
您必須在鏈接器命令文件中創建您自己的部分,並將您的部分正確放置在鏈接器命令文件中的變量部分。
對於大多數連接器,不能告訴它確切變量的順序。更簡單的解決方案是爲每個變量創建一個部分,並告訴鏈接器您要如何訂購這些部分。
查找GNU編譯器集合的鏈接器命令文件的確切語法。
好吧,我最終採取了完全不同的方法,但我想在這裏分享我的最終結論: 我的依據是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'語法。所以實際的解決方案應該是複製默認的鏈接器腳本,並將我的腳本信息添加到它。
雖然我還沒有測試過,但我仍然希望它能幫助別人。