我的项目有几个具有项目内部功能的目标文件,以及一个为公共接口公开功能的目标文件。我的目标是使用增量链接将所有目标文件合并到一个文件中,并让这个文件只公开公共接口所需的符号。
foo.c,公共接口。
void bar(void);
void foo(void)
{
bar();
}
bar.c,项目内部函数。
void bar(void)
{
}
$ gcc -c foo.c
$ gcc -c bar.c
$ ld -r -o combined.o foo.o bar.o
$ strip -N bar combined.o
strip: not stripping symbol `bar' because it is named in a relocation
这两个函数已经是同一目标文件中同一段的一部分,所以我相信应该可以在链接步骤中解决重定位问题?是否可以更改ld
命令以便不需要重定位?