假设我有三个 C 静态库,它们说 libColor.a 取决于 libRGB。 a,而后者又取决于 libPixel.a 。据说库 libColor.a 依赖于库 libRGB.a, 因为 libColor.a中 有对 libRGB.a 中定义的某些符号的 引用 。如何将上述所有库合并到独立的新 libNewColor.a ?
独立意味着新库应已定义所有符号。因此,在链接时,我只需要给 -lNewColor即可 。新库的大小应尽可能小,即它不应在 libRGB.a中 包含 libColor.a 等未使用的任何符号。我在 ar 命令中使用了各种选项来运气(用于创建和更新静态库/档案) )。
1 /从每个库中提取所有目标文件(使用ar),并尝试在没有库或任何目标文件的情况下编译代码。您可能会得到未定义符号的绝对存储量。如果没有未定义的符号,请转到步骤5。
ar
2 /抓住第一个,并使用找出哪个目标文件满足该符号nm。
nm
3 /写下该目标文件,然后编译您的代码,包括新的目标文件。您将获得一个新的未定义符号列表,或者如果没有,请转到步骤5。
4 /转到步骤2。
5 /将列表中的所有目标文件(如果有的话)合并到一个库中(再次使用ar)。
砰! 你有它。尝试不使用任何对象而是 使用 新库链接代码。
使用shell脚本可以相对容易地使整个过程自动化。