早上好, 我有以下情况:
我按照以下方式处理这个问题:
在我的 GTEST 中,我定义了 buyLib.so 库函数的包装实现 (即
void __wrap_firstBoughtLib()
{
//Some action to be trapped by gtest testcase
}
)并且我使用
修改了基于 gtest 的测试套件的 make 文件-Wl,--wrap=firstBoughtLib()
现在,当我直接从测试用例调用firstBoughtLib()时,调用的函数是__wrap_firstBoughtLib(),而不是buyLib.so中的原始函数。然而,在 middleware.so 中执行的对firstBoughtLib()的每次调用仍然使用buyLib.so中的函数。 我尝试从 LD_LOAD_LIBRARY 中删除包含 buyLib.so 的文件夹,以便 middleware.so 找不到它,但随后在启动时软件抱怨缺少库。
如果您对如何解决该问题有任何建议,我将不胜感激。
我终于发现可以避免这样的问题。 我没有修改 middleware.so makefile,而是修改了 tje 单元测试的 makefile 添加了该选项:
-Wl,-defsym,firstBoughtLib=__wrap_firstBoughtLib
通过这种方式,即使在 middleware.so 中执行的对符号firstBoughtLib 的任何调用都将被我的自定义 __wrap_firstBoughtLib 替换。 希望这可以帮助遇到类似问题的人