我正在研究一些作为静态库提供的嵌入式代码.我们希望从库中删除所有内部符号,并仅保留API符号可见.
这是我们想要做的一个例子:假设你有一个被调用的文件internal.c和一个被调用的文件api.c:
/* internal.c */
int fibonacci(int n)
{
/* Compute the nth Fibonacci number and return it */
}
/* api.c */
#include "internal.h"
#include <stdio.h>
void print_fibonacci(n)
{
printf("Fibonacci(%d): %d\n", n, fibonacci(n));
}
Run Code Online (Sandbox Code Playgroud)
用户应该只能访问该print_fibonacci功能,而所有内部符号(如fibonacci功能)应在发货前解决.这意味着用户应该能够定义自己的函数,fibonacci而不必担心与库的冲突.
我们已经尝试使用内部链接ld --relocatable,但我们似乎无法使用objcopy删除符号.这有可行吗?
谢谢您的帮助!
编辑:用户定义的fibonacci函数不应该替换库定义的函数,它们应该只能共存.基本上我正在寻找解决命名冲突的解决方案.