【发布时间】:2017-05-24 20:40:51
【问题描述】:
我想模拟 c lib 的函数,例如 malloc,而不会过多地更改原始源文件(使用 malloc 的那个)。
我尝试包含一个头文件“mock.h”,例如
#ifndef MOCK_H_
# define MOCK_H_
# ifdef MOCK_MODE
# include <sys/types.h>
extern void *my_mock_malloc(size_t n);
void *malloc(size_t n) __attribute__((weak, alias ("my_mock_malloc")));
# endif /* MOCK_MODE */
#endif /* !MOCK_H_ */
但它给了我一个错误
in file included from ...:
/usr/include/stdlib.h:466:14: error: ‘malloc’ aliased to undefined symbol ‘my_mock_malloc’
extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
GCC alias to function outside of translation unit -AKA- is this even the right tool for the job? 给出了部分解决方案:使用链接器我在符号上创建别名。我现在可以使用-Xlinker --defsym "malloc"="my_mock_malloc" 进行编译。问题是我的所有.o 文件都使用此选项链接,因此我使用的单元测试框架(check)受到模拟的影响(因此当我让我的模拟函数返回NULL 时它收到的是 SIGSEGV )。
有没有办法在本地执行这种符号别名,所以我可以让我的测试框架使用真正的 malloc? os 有没有比这个更好的解决方案?
【问题讨论】: