gcc: error: unrecognized option --wrap
gcc: error: unrecognized option --wrap
[更新] 对不起 posting,但首先了解这一点可能会有所帮助,因为它可能会改变问题。
--wrap
是 linker ld
的选项,而不是 gcc
。
但是我的 Eclipse 项目在 link 阶段使用 gcc
。
如何根据 cmocka
单元测试的需要使用包装函数?
我正在使用 gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
。
我正在尝试使用 linker 选项 --wrap
作为指定 here in order to use cmocka 对 C 代码进行单元测试。
错误是
make all
Building target: unit_test_C_code_example_project
Invoking: GCC C Linker
gcc --wrap=add -o "unit_test_C_code_example_project" ./test_scripts/test_maths.o ./software_under_test/mocks/mock_add.o ./software_under_test/maths.o -lcmocka
gcc: error: unrecognized option ‘--wrap=add’
make: *** [unit_test_C_code_example_project] Error 1
因此,linker 正在抱怨 --wrap=add
选项,但我不知道为什么。
不可避免地,如果我不 post 代码,有人会要求它,所以就在这里,尽管我怀疑它是否与 linker 选项问题相关:
在我的主要单元测试中,我有
static void test_multiply_two_by_three(void **state)
{
will_return(__wrap_add(0, 2), 2);
will_return(__wrap_add(2, 2), 4);
will_return(__wrap_add(4, 2), 6);
assert_int_equal(multiply(2, 3), 6);
}
在另一个文件中,我声明了模拟函数
int __wrap_add(int a, int b)
{
return mock();
}
并且,在我的被测软件中,要包装的函数被调用
int multiply(int x, int y)
{
int total = 0;
int i;
for (i = 0; i < y; i++)
total += add(total, x);
return total;
}
请注意,构建中的任何地方都没有名为 add()
的函数。我想要实现的是使用 __wrap_add
linker 选项模拟该功能。为什么 linker 拒绝它?
您可以使用 -Wl,<linker-option>
将选项传递给链接器。或者,某些版本的 gcc 有 -Xlinker <option>
。尝试 gcc -Wl,--wrap=add ...
[更新] 对不起 posting,但首先了解这一点可能会有所帮助,因为它可能会改变问题。
--wrap
是 linker ld
的选项,而不是 gcc
。
但是我的 Eclipse 项目在 link 阶段使用 gcc
。
如何根据 cmocka
单元测试的需要使用包装函数?
我正在使用 gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
。
我正在尝试使用 linker 选项 --wrap
作为指定 here in order to use cmocka 对 C 代码进行单元测试。
错误是
make all
Building target: unit_test_C_code_example_project
Invoking: GCC C Linker
gcc --wrap=add -o "unit_test_C_code_example_project" ./test_scripts/test_maths.o ./software_under_test/mocks/mock_add.o ./software_under_test/maths.o -lcmocka
gcc: error: unrecognized option ‘--wrap=add’
make: *** [unit_test_C_code_example_project] Error 1
因此,linker 正在抱怨 --wrap=add
选项,但我不知道为什么。
不可避免地,如果我不 post 代码,有人会要求它,所以就在这里,尽管我怀疑它是否与 linker 选项问题相关:
在我的主要单元测试中,我有
static void test_multiply_two_by_three(void **state)
{
will_return(__wrap_add(0, 2), 2);
will_return(__wrap_add(2, 2), 4);
will_return(__wrap_add(4, 2), 6);
assert_int_equal(multiply(2, 3), 6);
}
在另一个文件中,我声明了模拟函数
int __wrap_add(int a, int b)
{
return mock();
}
并且,在我的被测软件中,要包装的函数被调用
int multiply(int x, int y)
{
int total = 0;
int i;
for (i = 0; i < y; i++)
total += add(total, x);
return total;
}
请注意,构建中的任何地方都没有名为 add()
的函数。我想要实现的是使用 __wrap_add
linker 选项模拟该功能。为什么 linker 拒绝它?
您可以使用 -Wl,<linker-option>
将选项传递给链接器。或者,某些版本的 gcc 有 -Xlinker <option>
。尝试 gcc -Wl,--wrap=add ...