Ошибки компоновщика с codelite, unittest++ и g++ в linux
Я новичок в модульном тестировании в C++ и написании C++ в Linux (Mint). Я использую CodeLite в качестве моей IDE. Я нашел несколько ответов на stackru об ошибках компоновщика, но после нескольких часов попыток различных решений мне не удалось внедрить решение правильно.
Я установил unittest ++ через apt-get. Заголовочные файлы unittest ++ были установлены в /usr/include, поэтому я добавил это к параметрам компоновщика компилятора в Codelite (щелкните правой кнопкой мыши имя проекта-> Настройки, компилятор): скриншот Codelite
Затем у меня есть очень простая программа, которая полностью состоит из одного файла main.cpp:
#include <unittest++/UnitTest++.h>
//See if unit tests are working
TEST(MyMath) {
CHECK(false);
}
int main()
{
UnitTest::RunAllTests();
return 0;
}
Запуск проекта на этом этапе генерирует поток ошибок компоновщика, которые испытывали другие пользователи, например:
main.cpp: 4: неопределенная ссылка на UnitTest::CurrentTest::Details()
На данный момент я понимаю, что теперь мне нужно сообщить компилятору g ++ об объектных файлах и связать их с файлами unittest ++. И вот где я застрял. Единственный.o файл, который я вижу, находится в Debug/main.cpp.o и запускает команду
g++ main.cpp -o main.cpp.o -Lunittest++, а также варианты с флагами I и O, но все они возвращают те же ошибки компоновщика, которые я получаю при попытке компиляции. Я также пытался скопировать каждую строку g ++ на форумах и получать только различные ошибки.
Я пытался найти решение на страницах man g ++, читал о флагах, которые использовал, и не нашел решения. Затем я быстро утонул в количестве страниц в записи человека. Документация для CodeLite и unittest ++ выглядит ужасно устаревшей, поэтому я разместил здесь в качестве последнего средства stackru.
Я совершенно уверен, что я просто делаю ошибку новичка. Если у кого-то есть отзывы, я был бы благодарен.
1 ответ
В своем объяснении вы пытаетесь связать вручную с g++ -c main.cpp -o main.cpp.o -Lunittest++
, но -L
Опция дает путь к дополнительным каталогам для поиска библиотек. Вы, вероятно, хотите -lunittest++
связать с библиотекой unittest++. Эта библиотека должна содержать символы, которые вы видите в ошибках "неопределенная ссылка".
Как примечание, "/usr/include" должен быть в пути поиска по умолчанию, и нет необходимости добавлять его явно.