一尘不染

结合静态库

linux

假设我有三个 C 静态库,它们说 libColor.a 取决于 libRGB。 a,而后者又取决于 libPixel.a 。据说库
libColor.a 依赖于库 libRGB.a, 因为 libColor.a中 有对 libRGB.a 中定义的某些符号的 引用
。如何将上述所有库合并到独立的新 libNewColor.a

独立意味着新库应已定义所有符号。因此,在链接时,我只需要给 -lNewColor即可 。新库的大小应尽可能小,即它不应在 libRGB.a中
包含 libColor.a 等未使用的任何符号。我在 ar 命令中使用了各种选项来运气(用于创建和更新静态库/档案) )。


阅读 181

收藏
2020-06-03

共1个答案

一尘不染

1
/从每个库中提取所有目标文件(使用ar),并尝试在没有库或任何目标文件的情况下编译代码。您可能会得到未定义符号的绝对存储量。如果没有未定义的符号,请转到步骤5。

2 /抓住第一个,并使用找出哪个目标文件满足该符号nm

3 /写下该目标文件,然后编译您的代码,包括新的目标文件。您将获得一个新的未定义符号列表,或者如果没有,请转到步骤5。

4 /转到步骤2。

5 /将列表中的所有目标文件(如果有的话)合并到一个库中(再次使用ar)。

砰! 你有它。尝试不使用任何对象而是 使用 新库链接代码。

使用shell脚本可以相对容易地使整个过程自动化。

2020-06-03