【发布时间】:2021-07-06 09:41:42
【问题描述】:
环境:
- 操作系统:Ubuntu 16.04
- 编译器:GCC 5.4.0
我有两个依赖库(静态或共享,不确定这是否会影响)libA 和 libB。函数foo() 定义在libA 中,并在libB 中调用。现在我的应用程序代码app.c 直接从libB 调用函数,最终将调用foo()。一个简单的工作流程是app.c -> libB.a -> libA.a -> foo()。
但是,我想更改 foo() 为某些特定目的实现的方式。我希望app.c可以有一个神奇的功能,如果被调用,将调用重定向到foo()到app.c提供的那个。所以工作流程,如果可以实现的话,应该是
app.c -> libB.a -(other than foo())-> libA.a
| /
| (to call foo())
v /
foo()
尴尬的是我可以完全控制app.c,但很少甚至无法访问这些库。那么是否有可能实现这样的想法以及如何实现?
更新
正如在 cmets 中提到的,完全忽略这一点可能会导致完全不同的解决方案,重定向更好地配置并且在运行时发生。这是为了测试目的,因此通常工作流应该是它的样子,而只有在执行测试时才会改变自己。
【问题讨论】:
-
只需在
app.c中定义一个名为foo的函数即可。 -
@n.1.8e9-where's-my-sharem。我其实知道这个方法。但是我必须使用宏指令进行条件编译。重定向不是永久性的,我希望这可以通过条件变量进行配置,例如
testrun = true / false。 -
如果您需要选择在运行时调用哪一个,例如一个命令行参数,那么这是相当复杂的。您应该在问题中提到这一点。
-
您的描述不清楚,但您似乎在描述插入或类似的东西。搜索“interposition”、“interpose”或“interposing”以获取信息。