Подтвердить что ты не робот

Как настроить googleTest в качестве общей библиотеки в Linux

Debian больше не предоставляет никаких предварительно скомпилированных пакетов для gTest. Они предлагают вам интегрировать фреймворк в ваш проектный файл. Но я хочу сохранить мой make файл в чистоте. Как настроить gTest, как в предыдущих версиях (<1.6.0), чтобы я мог связываться с библиотекой?

4b9b3361

Ответ 1

Прежде чем начать, убедитесь, что вы прочитали и поняли эта заметка от Google! Этот учебник позволяет использовать gtest легко, но может содержать неприятные ошибки.

1. Получить раму googletest

wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz

Или получить его . Я не буду поддерживать этот маленький How-to, поэтому, если вы наткнулись на него и ссылки устарели, не стесняйтесь его редактировать.

2. Распаковать и построить тест Google

tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make

3. "Установите" заголовки и библиотеки в вашей системе.

Этот шаг может отличаться от distro to distro, поэтому убедитесь, что вы скопировали заголовки и библиотеки в правильном каталоге. Я сделал это, проверив, где были найдены Debians прежние gtest libs. Но я уверен, что есть лучшие способы сделать это. Примечание: make install является опасным и не поддерживается

$ sudo cp -a include/gtest /usr/include
$ sudo cp -a libgtest_main.so libgtest.so /usr/lib/

4. Обновите кеш компоновщика

... и проверьте, знает ли GNU Linker libs

$ sudo ldconfig -v | grep gtest

Если вывод выглядит следующим образом:

libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0

все в порядке.

gTestframework теперь готов к использованию. Просто не забудьте связать свой проект с библиотекой, установив -lgtest в качестве флага компоновщика и, при желании, если вы не создали собственный тестовый mainroutine, явный флаг -lgtest_main.

Здесь вы можете пойти в Googles documentation о структуре, чтобы узнать, как она работает. Счастливое кодирование!

Edit: Это работает и для OS X! См. "Как правильно настроить googleTest на OS X"

Ответ 2

Позвольте мне ответить на это специально для пользователей ubuntu. Сначала начните с установки самого безопасного пакета разработки.

sudo apt-get install libgtest-dev

Обратите внимание, что этот пакет устанавливает только исходные файлы. Вы должны сами составить код для создания необходимых файлов библиотеки. Эти исходные файлы должны быть расположены в /usr/src/gtest. Перейдите в эту папку и используйте cmake для компиляции библиотеки:

sudo apt-get install cmake # install cmake
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make

# copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
sudo cp *.a /usr/lib

Теперь, чтобы скомпилировать ваши программы, которые используют gtest, вам необходимо связать их с:

-lgtest -lgtest_main

Это отлично сработало для меня на Ubuntu 14.04LTS.

Ответ 3

Мне потребовалось некоторое время, чтобы понять это, потому что нормальная "make install" была удалена, и я не использую cmake. Вот мой опыт, чтобы поделиться. На работе у меня нет корневого доступа к Linux, поэтому я установил тестовую среду Google в свой домашний каталог: ~/usr/gtest/.

Чтобы установить пакет в ~/usr/gtest/в качестве разделяемых библиотек вместе с сборкой примеров:

$ mkdir ~/temp
$ cd ~/temp
$ unzip gtest-1.7.0.zip 
$ cd gtest-1.7.0
$ mkdir mybuild
$ cd mybuild
$ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" ..
$ make
$ cp -r ../include/gtest ~/usr/gtest/include/
$ cp lib*.so ~/usr/gtest/lib

Чтобы проверить установку, используйте следующий test.c в качестве простого тестового примера:

    #include <gtest/gtest.h>
    TEST(MathTest, TwoPlusTwoEqualsFour) {
        EXPECT_EQ(2 + 2, 4);
    }

    int main(int argc, char **argv) {
        ::testing::InitGoogleTest( &argc, argv );
        return RUN_ALL_TESTS();
    }

Скомпилировать:

    $ export GTEST_HOME=~/usr/gtest
    $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH
    $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp 

Ответ 4

Если вы используете CMake, вы можете использовать ExternalProject_Add, как описано здесь.

Это позволяет избежать сохранения исходного кода в вашем репозитории или его установки в любом месте. Он автоматически загружается и создается в вашем дереве сборки.

Ответ 5

Я был так же потрясен этой ситуацией и в итоге создал для меня собственные исходные пакеты Ubuntu. Эти исходные пакеты позволяют легко создавать двоичный пакет. Они основаны на последнем файле gtest и gmock на этом посту.

Пакет исходных файлов DEB для Google

Исходный пакет Google Mock DEB

Чтобы создать бинарный пакет, выполните следующие действия:

tar -xzvf gtest-1.7.0.tar.gz
cd gtest-1.7.0
dpkg-source -x gtest_1.7.0-1.dsc
cd gtest-1.7.0
dpkg-buildpackage

Он может сказать вам, что вам нужны некоторые предварительные пакеты, в этом случае вам просто нужно apt-get установить их. Кроме того, встроенные двоичные пакеты .deb затем должны находиться в родительском каталоге.

Для GMock процесс одинаков.

В качестве побочного примечания, не относящегося к моим исходным пакетам, при привязке gtest к вашему unit test, убедитесь, что первый параметр включен (https://bbs.archlinux.org/viewtopic.php?id=156639) Это похоже на обычную игру.

Ответ 6

На всякий случай кто-то другой попадает в ту же ситуацию, что и я вчера (2016-06-22), а также не удается с уже опубликованными подходами - на Lubuntu 14.04 он работал у меня, используя следующую цепочку команд:

git clone https://github.com/google/googletest
cd googletest
cmake -DBUILD_SHARED_LIBS=ON .
make
cd googlemock
sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/
sudo ldconfig

Ответ 7

Этот ответ от askubuntu - это то, что сработало для меня. Кажется проще, чем другие варианты, менее подверженные ошибкам, поскольку он использует пакет libgtest-dev для получения источников и сборки оттуда: https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top

Пожалуйста, обратитесь к этому ответу, но, как ярлык, я также предлагаю следующие шаги:

sudo apt-get install -y libgtest-dev
sudo apt-get install -y cmake
cd /usr/src/gtest
sudo cmake .
sudo make
sudo mv libg* /usr/lib/

После этого я мог бы построить свой проект, который зависит от gtest без проблем.

Ответ 8

В системе Ubuntu/Debian будет установлена ​​тестовая и текстовая библиотека google.

sudo apt-get install google-mock

Протестировано в облаке Google в образовании на основе debian.

Ответ 9

Это создаст и установит как gtest, так и gmock 1.7.0:

mkdir /tmp/googleTestMock
tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock
tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock
cd /tmp/googleTestMock
mv googletest-release-1.7.0 gtest
cd googlemock-release-1.7.0
cmake -DBUILD_SHARED_LIBS=ON .
make -j$(nproc)
sudo cp -a include/gmock /usr/include
sudo cp -a libgmock.so libgmock_main.so /usr/lib/
sudo cp -a ../gtest/include/gtest /usr/include
sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/
sudo ldconfig

Ответ 10

Следующий метод позволяет избежать ручного связывания с каталогом /usr/lib а также требует минимальных изменений в файле CMakeLists.txt. Это также позволяет вашему менеджеру пакетов без libgtest-dev удалить libgtest-dev.

Идея состоит в том, что когда вы получаете пакет libgtest-dev через

sudo apt install libgtest-dev

Источник хранится в папке /usr/src/googletest

Вы можете просто указать свой CMakeLists.txt на этот каталог, чтобы он мог найти необходимые зависимости

Просто замените FindGTest на add_subdirectory(/usr/src/googletest gtest)

В конце все должно выглядеть так

add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)

Ответ 11

Для 1.8.1 на основе ответа @ManuelSchneid3r я должен был сделать:

wget github.com/google/googletar xf release-1.8.1.tar.gz 
tar xf release-1.8.1.tar.gz
cd googletest-release-1.8.1/
cmake -DBUILD_SHARED_LIBS=ON .
make

Затем я сделал make install которая работала на 1.8.1, но после @ManuelSchneid3r это означало бы:

sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/include/gmock /usr/include
sudo cp 'find .|grep .so$' /usr/lib/