Я читаю «Разработка через тестирование для Embedded C» Джеймса У. Греннинга.
Я бы хотел воспроизвести случай с «Подстановкой времени ссылки» с использованием Visual Studio Community 2019 и gTest.
У меня есть следующий код:
production_code статически связанная библиотека
foo.cpp
#include "foo.h"
int foo(int x) {
return x + 1;
}
foo.h
#ifndef _foo_
#define _foo_
int foo(int x);
#endif //_foo_
В проекте gtest библиотека production_code включена по ссылке test.cpp
#include "gtest\gtest.h"
#include "gmock\gmock.h"
#include "..\prod\foo.h"
//fake implementation of production code foo
int foo(int x) {
return x - 1;
}
TEST(TestCaseName, TestName) {
auto x = foo(5);
EXPECT_EQ(x, 4);
}
Компоновщик выдает мне следующую ошибку:
1> prod.lib (foo.obj): ошибка LNK2005: «int __cdecl foo (int)» (? Foo @@ YAHH @ Z) уже определено в test.obj 1> C: \Пример \ prod_test.exe: фатальная ошибка LNK1169: найден один или несколько кратно определенных символов
Что я здесь пропустил? Почему это не работает?
Если я добавлю команду "/ FORCE: MULTIPLE" к компоновщику, то получу только предупреждение, но думаю, что это неправильный подход к этому.