有没有办法从链接器脚本的特定部分中排除函数/符号?

问题描述:

我已经使用EXCLUDE_FILE明确省略了某些对象文件的某些部分放置在我想要生成的主对象文件中。我想知道是否有一种方法可以省略一个特定的符号而不是整个部分。有没有办法从链接器脚本的特定部分中排除函数/符号?

实施例:

说我有一个库A.LIB它由1.O,2.O和3.O用的.text和。数据段。 1.o的.text部分包含func1,func2和func3。

使用EXCLUDE_FILE,我只能从1.o中省略整个.text或.data节。我想只能省略func1并放置func2和func3。这可能吗?

如果你使用GCC,你可以把你的功能放在一个单独的部分。用链接器脚本移动或省略该部分。

int f3(void) __attribute__((section(".excl"))); 

int f3(void) { 

    ... 
} 

这些告诉GCC将f3编译成.excl段。然后用你的链接脚本,你可以把它放在别的地方。

SECTIONS 
{ 
    .text : 
    { 
     *(.text) 
    } 
    .... 
    .excl : 
    { 
     *(.excl) 
    } 
}