Как разрешить LNK2019 в решении VS2008 с несколькими проектами? - PullRequest
0 голосов
/ 14 декабря 2011

Да, еще один вопрос LNK 2019, но я не смог найти решение своей конкретной проблемы.

Надеюсь, вы можете помочь с этим, так как это совершенно сбивает меня с толку. Это мой первый опыт работы с несколькими проектами и модульным тестированием на C ++.

Справочная информация:

  • Консольное приложение Win32
  • Проект A - основное приложение (main.cpp, do_app.cpp, do_app.hpp)
  • Проект B - Повышение модульного теста проекта A (do_test.cpp)
  • Проект B зависит от проекта A в зависимостях проекта.
  • Проект A компилируется первым в последовательности сборки.
  • Проект B включает файлы в проекте A в разделе «Дополнительные зависимости включения».
  • do_test.cpp включает do_app.hpp.

Когда я строю проект, я получаю следующую ошибку:

do_test.obj : error LNK2019: unresolved external symbol "int __cdecl dummy(void)" (?dummy@@YAHXZ) referenced in function "public: void __thiscall AddTask_noTasksExistAtAll_dataFileCreated::test_method(void)" (?test_method@AddTask_noTasksExistAtAll_dataFileCreated@@QAEXXZ)
2>D:\Documents\Trader Rick\Projects\do\Debug\do_test.exe : fatal error LNK1120: 1 unresolved externals

int dummy() - функция, созданная в do_app.hpp и созданная в do_app.cpp. Он вызывается do_test.cpp.

Если я заменю

#include "do_app.hpp"

с

#include "do_app.cpp"

тогда проблема исчезает и исполняемый файл работает как положено.

Теперь ясно, что компоновщик в сборке do_test.exe не может видеть файл do_app.obj. Мой вопрос почему нет? Я думаю, что я правильно установил свойства проекта для проекта B.

Есть идеи, ребята?

заранее спасибо

1 Ответ

0 голосов
/ 14 декабря 2011

OK.Не знаю, если это ответ или обходной путь.

При модульном тестировании исполняемого файла сама методология Boost создает другой исполняемый файл.Поэтому у вас есть 2 исполняемых файла в одном решении, которое VS не любит.

  • Удалите основную точку входа для тестируемой программы из вашего решения, т.е. удалите main.cpp в моем конкретном случае.
  • Переместите код, который вы хотите протестировать в вашей основной точке входа, в отдельную единицу компиляции.(Отныне пусть этот код вызывается из main.cpp, а не содержится в нем.)
  • Создание статической библиотеки из этого тестируемого кода вместо исполняемого файла.
  • Теперьу вас должна быть возможность без проблем запускать модульные тесты Boost.
...