c - C 强制从另一个模块重新定义函数(monkeypatching)
问题描述
我的目标是在进行测试构建时能够对我的许多功能进行猴子补丁,同时对正常构建(链接器错误)具有常规行为。
我知道我可以在原始模块中使用#pragma weak
或者__attribute__ (( weak))
在我想要monkeypatch 的函数前面对链接器说:“这个函数是monkeypatchable”。
但这会破坏常规构建中的正常行为。相反,我想在新模块中加入一些东西,比如#pragma this_is_the_one_definition
. 然后,无论他检查的下一个功能和模块如何,链接器都会选择此定义。
它们是解决方法(为所有函数设置 GCC 默认属性(让所有函数符号对猴子补丁都很弱)),但我觉得这样做是错误的。真的没有办法强制链接器坚持一个定义吗?在我看来,这个功能不被认为是可行/有用的,但在另一端,整个弱符号的东西已经实现了,这对我来说似乎很奇怪。
解决方案
推荐阅读
- http - 为什么我们在 websocket 握手响应中使用 \n\r ?
- android - Firebase 在应用消息传递实现中与 gradling 相关的编译错误
- excel - 网页抓取到 Excel 文件中
- laravel - Laravel 在 intersect 方法之上分页
- java - 预定注解和自定义 StringResolver
- java - JSVC re-exec 需要使用绝对或相对路径执行
- android - 播放单轨Spotify SDK
- php - 我无法获取与 DOMXpath 一起排列的 url 的 html 内容
- c - python和c for循环的区别
- java - 输入一个数字,从Java中的给定样本中输出固定数字