2014-10-07 4 views
4

Я изучаю тест google. Я скачал GTEST, побежал команды ./configure и make и закончилсяgoogle testing missing DSO

$ sudo cp -a include/gtest /usr/include 
$ sudo cp -a lib/.libs/* /usr/lib/ 

я получил все это от here. Я попытался запустить этот код

#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 

, но я получил ошибку

/usr/bin/ld: /tmp/ccVTj3Rk.o: undefined reference to symbol '_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 

я делаю что-то неправильно, или это ошибка?

+0

AFAIK, вы не должны реализовывать 'main()', если вы ссылаетесь на 'gtest_main' – tgmath

+0

, поэтому я должен удалить' main() '? Что вы делаете – TheGuyWithStreetCred

+1

Я протестировал его без 'main()' и скомпилировал его так, как вы. Важно добавить libs после 'test.cpp'. – tgmath

ответ

6

В вашей настройке есть некоторые ошибки.

Вы скопировали включить/GTEST в /USR/включать (sudo cp -a include/gtest /usr/include), но при попытке компиляции компилятору искать заголовки GTEST в каталоге ~/USR/GTEST, не в каталоге, который вы указали ранее (/usr/include/gtest). То же самое происходило с файлами lib/.libs/*. Вы копируете их в месте и во время компиляции вы запрашиваете их в другом месте.

Сохраняя следующие конфигурации:

$ sudo cp -a include/gtest /usr/include 
$ sudo cp -a lib/.libs/* /usr/lib/ 

изменения #include <gtest/gtest.h> в #include "gtest/gtest.h" и попытаться обобщить так:

g++ -g -Wall <your .cpp files> -I /usr/include/gtest/ -L /usr/lib/ -lgtest -lgtest_main -lpthread 

И вы должны увидеть следующий вывод после запуска ./a.out файла (или любого другого имени, которое вы назначаете исполняемому файлу)

[==========] Running 1 test from 1 test case. 
[----------] Global test environment set-up. 
[----------] 1 test from MathTest 
[ RUN  ] MathTest.TwoPlusTwoEqualsFour 
[  OK ] MathTest.TwoPlusTwoEqualsFour (0 ms) 
[----------] 1 test from MathTest (0 ms total) 

[----------] Global test environment tear-down 
[==========] 1 test from 1 test case ran. (0 ms total) 
[ PASSED ] 1 test. 
Смежные вопросы