我有一个IAR STM32项目,需要用一些自定义逻辑包装库函数。我无法重新编译库本身,所以我想要做的是创建一个函数libfunction_shim,该函数调用原始的libfunction。使用--redirect链接器选项(--redirect libfunction=libfunction_shim),我可以将对原始函数的调用重定向到shim,包括库本身内的调用。但是,我需要从垫片中调用原始函数。
如果我添加另一个重定向(--redirect libfunction_original=libfunction),它最终会将libfunction_original重定向到libfunction_shim,而不是原来的libfunction。我试过重新排序重定向,但是不管顺序如何,它都会做同样的事情。
链接器日志演示了这一点:
Symbol Redirected to Reason
------------- ------ ------
...
libfunction libfunction_shim command line
libfunction_original libfunction_shim command line我想要的是:
Symbol Redirected to Reason
------------- ------ ------
...
libfunction libfunction_shim command line
libfunction_original libfunction command line用链接器可以做到这一点吗?
发布于 2019-06-03 08:14:51
使用链接器重定向是不可能的,您必须以特定的方式编写您的shim函数。手册中提供了完整的描述( 8.40.1版本中的第225页),但总括而言:首先您可以将shim命名为$sub$$libfunction,其中libfunction是要阴影的函数的名称。在shim内部,您可以使用$super$$libfunction调用libfunction的原始版本。下面是一个最小的例子。
extern void $Super$$foo(void);
void $Sub$$foo(void)
{
$Super$$foo(); /* calls the original foo() function */
}https://stackoverflow.com/questions/56420356
复制相似问题