gcc:错误:无法识别的选项--wrap

时间:2015-10-22 09:52:11

标签: gcc linker-errors linker-flags

[更新]很抱歉热门发布,但首先要知道这一点,因为它可能会改变问题。

--wrap是链接器ld的选项,而不是gcc的选项。

但我的Eclipse项目正在使用gcc作为链接阶段。

如何根据cmocka单元测试的需要使用包裹函数?

我正在使用gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

我正在尝试使用指定here的链接器选项--wrap,以便使用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

所以,链接器抱怨--wrap=add选项,但我不知道为什么。

不可避免地,如果我不发布代码,有人会请求它,所以就在这里,即使我怀疑它与链接器选项问题有关:

在我的单元测试主编中,我有

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);
}

在另一个文件中,我声明了mock函数

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链接器选项来模拟该函数。为什么链接器拒绝它?

1 个答案:

答案 0 :(得分:4)

您可以使用-Wl,<linker-option>将选项传递给链接器。或者,对于某些版本的gcc,还有-Xlinker <option>。试试gcc -Wl,--wrap=add ...