我的应用程序调用放置在外部静态库中的一些函数。我将外部静态库链接到我的应用程序,一切正常(在这种情况下,我正在使用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等)?