首页 > 解决方案 > C 强制从另一个模块重新定义函数(monkeypatching)

问题描述

我的目标是在进行测试构建时能够对我的许多功能进行猴子补丁,同时对正常构建(链接器错误)具有常规行为。

我知道我可以在原始模块中使用#pragma weak或者__attribute__ (( weak))在我想要monkeypatch 的函数前面对链接器说:“这个函数是monkeypatchable”。

但这会破坏常规构建中的正常行为。相反,我想在新模块中加入一些东西,比如#pragma this_is_the_one_definition. 然后,无论他检查的下一个功能和模块如何,链接器都会选择此定义。

它们是解决方法(为所有函数设置 GCC 默认属性(让所有函数符号对猴子补丁都很弱)),但我觉得这样做是错误的。真的没有办法强制链接器坚持一个定义吗?在我看来,这个功能不被认为是可行/有用的,但在另一端,整个弱符号的东西已经实现了,这对我来说似乎很奇怪。

标签: ccompilationlinker

解决方案


推荐阅读