原理
可以使用gcc的链接选项 -Wl,–wrap=func。
会设置符号映射,在符号重定位阶段的时候,静态链接器对func函数的定位会定位到 __wrap_func 符号,对 __real_func 会定位到原func。
举例说明:
C Mock
libtest.h
/// @file libtest.h
#ifndef __LIBTEST_H__
#define __LIBTEST_H__
void test_func();
#endif
libtest.c
/// @file libtest.c
#include "libtest.h"
#include <stdio.h>
void test_func() {
printf("test_func\n");
};
test.c
/// @file test.c
#include "libtest.h"
int main() {
test_func();
return 0;
};
wrap.c
/// @file wrap.c</