最近做了一个将具有音频水印加解嵌功能的程序编写为库文件的工作,由于本人很垃圾,过程中遇到无数困难,在此记录一个困扰时间最长的错误。
原本是一个程序,将其分开为两个:加嵌和解嵌。
由于是由一分二,所以两套代码中有部分类和函数是共有的,当时为了图省事,在两套代码中并未做区分,也没有检查代码中像static这种全局变量,导致加嵌和解嵌的代码有大量耦合的地方
在实际使用这两个库的时候,现象是:只进行加嵌无错误,只进行解嵌无错误,一旦两个任务同时使用,也就是两个库被同时调用,就会导致数据错乱。
后来分析了好久主程序代码都没有找到问题,最后才关心库是否线程安全。在两个库中加入打印发现,只调用解嵌库时,会打印加嵌库中的打印。。。。。才恍然大悟原来是有些类名、函数名、甚至有些全局的东西没有消除。在修改库文件后错误解除
但是还有一点点不明白的是,程序使用了除我写的这两个库以外,还使用了其他成百上千(夸张)的其他库文件,编译的时候也都依赖了他们,难道那些库中就没有重复的函数吗?一个都没有吗???