gcc: ошибка: неизвестная опция --wrap

[Обновление] Извините за публикацию вверху, но может быть полезно сначала узнать об этом, так как это, вероятно, меняет проблему.

--wrap является опцией компоновщика ld, а не gcc.

Но мой проект Eclipse использует gcc для этапа ссылки.

Как я могу использовать функции переноса, необходимые для cmocka модульного тестирования?


Я использую gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3.

Я пытаюсь использовать параметр компоновщика --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);
}

В другом файле я объявляю фиктивную функцию

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. Почему компоновщик отклоняет его?


person Mawg says reinstate Monica    schedule 22.10.2015    source источник


Ответы (1)


Вы можете передать параметры компоновщику с помощью -Wl,<linker-option>. В качестве альтернативы есть -Xlinker <option> для некоторых версий gcc. Попробуйте gcc -Wl,--wrap=add ...

person toster-cx    schedule 22.10.2015
comment
Вы, сэр, гений!! Кстати, если бы я хотел вторую, скажем, вторую функцию, как бы это выглядело? gcc -Wl,--wrap=add --wrap=two или gcc -Wl,--wrap=add -Wl,--wrap=two? - person Mawg says reinstate Monica; 22.10.2015
comment
Вы можете передать несколько вариантов с помощью -Wl,<option1>,<option2>,..., поэтому я предполагаю, что -Wl,--wrap=add,--wrap=two - person toster-cx; 22.10.2015
comment
Год спустя, и я также начал работать с двумя отдельными -Wl, wrap= без промежуточной запятой. Например. Wl,--wrap=something --wrap=somethingElse - person Mawg says reinstate Monica; 21.06.2016