Настройка библиотеки для включения в тест C ++ - PullRequest
3 голосов
/ 30 марта 2010

Я хотел бы использовать библиотеку UnitTest ++ в тестовом файле. Тем не менее, я испытываю некоторые трудности с включением библиотеки во время компиляции. Итак, вот моя текущая структура каталогов:

tests/
  UnitTests++/
    libUnitTest++.a
    src/
      UnitTests++.h
  unit/
    test.cpp

Я только что использовал руководство UnitTest ++ Getting * , чтобы просто получить настройки библиотеки. Вот test.cpp:

// test.cpp
#include <UnitTest++.h>

TEST(FailSpectacularly)
{
 CHECK(false);
}

int main()
{
 return UnitTest::RunAllTests();
}

И я сейчас пытаюсь скомпилировать:

gcc -lUnitTest++ -L../UnitTest++/ -I../UnitTest++/src/ test.cpp

В настоящее время я получаю групповой вывод с ld: symbol(s) not found в конце. Итак, как мне правильно включить библиотеку UnitTest ++ при компиляции этой программы? Я работаю на Mac, и я также хотел бы, чтобы люди, работающие на Linux, имели простой способ запустить эти же тесты.

Вот так, я надеюсь, что это дает достаточно информации, если нет, пожалуйста, дайте мне знать.

Ответы [ 4 ]

1 голос
/ 30 марта 2010

Я смог построить его следующим образом

gcc -L../UnitTest++/ -I../UnitTest++/src/ test.cpp -lUnitTest++ -lstdc++

или

g++ -L../UnitTest++/ -I../UnitTest++/src/ test.cpp -lUnitTest++

, которая автоматически ссылается на libstdc ++.


Документация GCC гласит:

-llibrary

-l библиотека

Поиск библиотеки с именем библиотека при связывании. (Второй вариант с библиотекой в ​​качестве отдельного аргумента предназначен только для соответствия POSIX и не рекомендуется.)

Имеет значение, где в команде вы пишете эту опцию; компоновщик ищет и обрабатывает библиотеки и объектные файлы в указанном порядке.

Таким образом, foo.o -lz bar.o' searches library z 'после файла foo.o, но перед bar.o. Если bar.o ссылается на функции в `z ', эти функции могут не загружаться.

Наверное, поэтому символы библиотеки не обнаруживаются, когда вы сначала указываете -lUnitTest ++, а затем test.cpp

1 голос
/ 30 марта 2010

Скомпилируйте test.cpp, чтобы получить test.o

и используйте

g ++ test.o libUnitTest ++. A -o ./exectest

чтобы получить исполняемый файл ./exectest

libUnitTest ++. A - это просто архив всех объектных файлов UnitTest ++. Вам просто нужно связать все объектные файлы (ваш тестовый объектный файл + libUnitTest ++. A)

Попробуйте отредактировать make-файл, поставляемый с unittest ++, и сделайте его подходящим для вашего случая

0 голосов
/ 30 марта 2010

Обычно вы должны поставить что-то перед тем, что в этом нуждается.

0 голосов
/ 30 марта 2010

Сообщение ld: symbol(s) not found означает, что вы не скомпилировали библиотеку. Поэтому вам нужно зайти в папку UnitTest ++, скомпилировать и установить ее.

Я никогда не работал на MAC, но в linux библиотеки обычно компилируются и устанавливаются с:

./configure
make
make install

В размещенной вами ссылке на UnitTest ++ вы должны просто:

make install

Тогда у вас будет библиотека UnitTest ++. So в папке библиотеки вашей ОС. Теперь библиотеку можно связать с вашей программой с помощью команды -lUnitTest ++.

...