Ошибки компоновщика с 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" должен быть в пути поиска по умолчанию, и нет необходимости добавлять его явно.

Другие вопросы по тегам