Как установить Google-макет на Ubuntu 12.10

Я с трудом пытаюсь установить Google C ++ Mocking Framework. Я успешно запустил sudo apt-get install google-mock. Затем я попытался скомпилировать этот пример файла

#include "gmock/gmock.h"
int main(int argc, char** argv) {
  ::testing::InitGoogleMock(&argc, argv);
  return RUN_ALL_TESTS();
}

с g++ -lgmock main.cpp, и эти ошибки показали

main.cpp:(.text+0x1e): undefined reference to `testing::InitGoogleMock(int*, char**)'
main.cpp:(.text+0x23): undefined reference to `testing::UnitTest::GetInstance()'
main.cpp:(.text+0x2b): undefined reference to `testing::UnitTest::Run()'
collect2: error: ld returned 1 exit status

Я думаю, компоновщик не может найти файлы библиотеки. Кто-нибудь знает, как это исправить?

6
задан 20 November 2012 в 03:07

4 ответа

libgmock-dev будет включен в стандартные репозитории Ubuntu 18.10, в противном случае в более ранних выпусках Ubuntu вам придется вручную загрузить и установить его.

sudo apt-get install libgmock-dev
cd /usr/src/gmock
sudo mkdir build
sudo cmake ..
sudo make
sudo cp *.a /usr/lib
0
ответ дан 20 November 2012 в 03:07

Хорошо, теперь я успешно начал использовать gmock, создав свою собственную версию в соответствии с README, предоставляемым с исходной загрузкой с веб-сайта проекта googlemock.

Загрузите zip-файл для загрузки с веб-сайта: http://code.google.com/p/googlemock/downloads/list

Распакуйте его в каталог, скажем ${GMOCK_ROOT}. Затем в соответствии с инструкциями README :

cd ${GMOCK_ROOT}
mkdir build
cd build
g++ -I../gtest/include -I../gtest -I../include -I.. -c ../gtest/src/gtest-all.cc
g++ -I../gtest/include -I../gtest -I../include -I.. -c ../src/gmock-all.cc
ar -rv libgmock.a gtest-all.o gmock-all.o

Таким образом, у вас есть собственный libgmock.a в ${GMOCK_ROOT}/build. На самом деле вам также нужны pthreads для компиляции, поэтому ваша команда компиляции после этого становится:

g++ -I${GMOCK_ROOT}/include/ main.cpp -L${GMOCK_ROOT}/build -lgmock -lpthread
0
ответ дан 20 November 2012 в 03:07

Чтобы дать контекст ответу Павла, скомпилированный двоичный файл Google Mock не распространяется с пакетом Ubuntu по причине, указанной здесь здесь . Это объяснение относится к Google Test, но этот принцип применим к любой библиотеке C ++.

В частности, в нем говорится:

В первые дни мы говорили, что вы можете установить скомпилированные библиотеки Google Test в * nix системах, используя make install. Тогда каждый пользователь вашей машины сможет писать тесты без перекомпиляции Google Test.

Это казалось хорошей идеей, но у нее есть кое-что: каждый пользователь должен скомпилировать свои тесты, используя те же флаги компилятора, которые использовались для компиляции установленных библиотек Google Test; в противном случае он может столкнуться с неопределенным поведением (т. е. тесты могут вести себя странно и даже не работать без видимых причин).

Почему? Поскольку в C ++ есть такая вещь, которая называется правилом одного определения: если два исходных файла C ++ содержат разные определения одного и того же класса / функции / переменной и вы связываете их вместе, вы нарушаете правило. Компоновщик может или не может поймать ошибку (во многих случаях это не требуется стандартом C ++, чтобы поймать нарушение). Если этого не произойдет, вы получите странное поведение во время выполнения, которое будет неожиданным и сложным для отладки.

Если вы компилируете Google Test и свой тестовый код, используя разные флаги компилятора, они могут увидеть разные определения одного и того же класса / функции / переменной (например, из-за использования #if в Google Test). Поэтому для вашего удобства мы рекомендуем избегать установки предварительно скомпилированных библиотек Google Test. Вместо этого каждый проект должен сам скомпилировать Google Test, чтобы быть уверенным, что одни и те же флаги используются и для Google Test, и для тестов.

Итак, ваша первоначальная проблема заключалась в том, что при установке пакета google-mock был установлен только исходный код, а когда вы пытались скомпилировать пример приложения, библиотека gmock не была найдена.

0
ответ дан 20 November 2012 в 03:07

Всего, я использую два метода установки, но во втором методе необходимо создать 'CMakeLists.txt' (где данные проекта будут обозначены, подкаталог), файл сами, и поместите его в '/root/my_build каталог'. Я должен был удалить старую версию 'cmake' и установить новый. Я пытался установить на Ubuntu 18.04.3 LTS 'gmock' на корне и всем связанном с его установкой.

метод 1:

# apt search gmock

# apt-get install Ваш метод gmock

версии 2:

# apt install unzip

# wget https://github.com/cfmobile/gmock/archive/master.zip

# unzip master.zip -d /${GMOCK_ROOT}

# cd ${GMOCK_ROOT}

# mkdir my_build

# cd my_build

# cmake ..

# cd .. (выходят от my_build, если 'CMakeLists.txt' не нашел, необходимо создать его сами).

находят и удаляют старую версию cmake:

# apt list --installed | grep cmake

# apt-get remove cmake

# cmake --version

# reboot

устанавливают новую версию cmake:

# wget https://github.com/Kitware/CMake/releases/download/v3.15.3/cmake-3.15.3.tar.gz

# tar -zxvf cmake-3.15.3.tar.gz

# cd cmake-3.15.3

# ./configure

# make

# make install

# reboot

снова возвращаются к/root/my_build:

# cd my_build

# cmake ..

# make --jobs 4

# cd $GMOCK_HOME/gtest

# mkdir

# cd my_build

# cmake ..

# make --jobs 4

0
ответ дан 16 October 2019 в 16:11

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

Похожие вопросы: