我们假设我有以下C代码:
extern int f_1();
extern int g_1();
extern int f_2();
extern int g_2();
extern int f_3();
extern int g_3();
int main(int argc, char **argv) {
// Using f_1, f_2, f_3 and g_1, g_2, g_3 here:
...
}
我想通过链接3个不同的库来构建它:l1
,l2
,l3
- 假设每个库都导出自己的f
和{{ 1}}函数 - 以便:
g
和f_1
将分别从g_1
解析为f
和g
; l1
和f_2
将分别从g_2
解析为f
和g
; l2
和f_3
将分别从g_3
解析为f
和g
。这可以用gcc和ld:
l3
,l1
,l2
是共享库( .so ),是否可以这样做?l3
,l1
,l2
是档案( .a ),是否可以这样做?答案 0 :(得分:1)
objcopy' --redefine-sym
选项是您的朋友:
- redefine-sym old = new
将 old 符号的名称更改为 new 。这可能是有用的 尝试将两个东西联系在一起,你没有任何来源,而且有 名称冲突。
- 重新定义-SYMS = 文件名
将--redefine-sym应用于每个符号对" 旧 新"列在文件中 文件名。 filename 只是一个平面文件,每行一个符号对。 线条注释可以由哈希字符引入。这个选项可能是 不止一次。
将它应用于您的图书馆l1
,l2
,l3
。它应该适用于 .a 和 .so 。