我的應用程序調用放置在外部靜態庫中的一些函數。我將外部靜態庫鏈接到我的應用程序,一切正常(在這種情況下,我正在使用GCC)。將外部靜態庫的段放到特定位置
儘管如此,鏈接器會選擇庫的文本,.data和.bss部分的位置(地址)。我可以通過修改鏈接器腳本來選擇/更改它們的位置,但是由於必須指定庫的所有函數,變量等,因此很繁瑣。我的意思是這樣的:
. = 0x1000; /* new location */
KEEP(*(.text.library_function1));
KEEP(*(.text.library_function2));
[...]
另一種解決方案是通過將節屬性每個函數/變量,然後通過重新定位整段修改鏈接程序生成的外部庫。喜歡的東西:
/* C source file */
unsigned char __attribute__((section (".myLibrarySection"))) variable1[10];
unsigned char __attribute__((section (".myLibrarySection"))) variable2[10];
/* Linker script */
. = 0x1000;
KEEP(*(.myLibrarySection))
不過,我希望能夠重新定位整個的.text,。數據和外部靜態庫的.bss段,而不需要使用這些技巧的。
我想這樣的事情(在連接器腳本):
. = 0x1000;
KEEP(*(.text.library_file_name))
使用GCC工具鏈是否有可能?
是否有可能使用其他工具鏈(IAR,Keil等)?