修改编译的静态库

时间:2012-04-05 22:12:22

标签: c++ objective-c c ios xcode

戴上你的c ++忍者伏都教手套。

我们购买了第三方库,可在我们的iOS应用中使用。该库有2个版本,因此我们称之为bull_frog_noises.atoad_frog_noises.a

该公司从未想过有人会想在单个应用中发现两种青蛙噪音,因此每个库都提供相同的方法名称

MAKE_FROG_NOISE();

有没有办法重建或修改这些库,以便它们可以在不相互碰撞的情况下使用?这是理想的状态:

MAKE_BULL_FROG_NOISE();
MAKE_TOAD_FROG_NOISE();

2 个答案:

答案 0 :(得分:4)

我会尝试使用十六进制编辑器手动修改其中一个库,以便MAKE_FROG_NOISE的每个实例都替换为MAKE_TOAD_NOISE。你必须非常小心,只做一次改变。您只能替换字节。不要插入或删除任何内容。并且不要更改文件中的任何其他内容。

答案 1 :(得分:3)

您可以使用所需的方法名称构建另一个静态库作为这些库的包装,然后在项目中包含包装器库。

像这样:

1 - 创建一个名为bull_frog_noises_wrapper.a的新静态库项目。

2 - 包括bull_frog_noises.a作为对这个新创建的库的依赖。

3 - 创建这样的方法:

void MAKE_BULL_FROG_NOISE()
{
    MAKE_FROG_NOISE();
}

4 - 为toad_frog_noises.a做同样的事情,创建如下方法:

void MAKE_TOAD_FROG_NOISE()
{
    MAKE_FROG_NOISE();
}

5 - 在项目中添加这些包装,然后就完成了。

请注意您在主项目中使用的头文件,以免它们与内部库冲突。

希望它有所帮助。