2012-09-30 18 views
11

Estoy tratando de usar GoogleTest para probar una función simple, pero como ejecuto make en mi carpeta de compilación, el compilador me lanza mensajes de error Undefined Reference. Hice referencia al archivo de cabecera gtest, por lo que no estoy seguro de cuál es el problema. ¿Algunas ideas? Soy nuevo en todo el tema de las pruebas unix y unit, por lo que podría estar perdiendo algo simple. ¡Gracias por adelantado!Gtest: referencias no definidas

mensajes de error:

CMakeFiles/Proj2.dir/main.cpp.o: In function `main': 
main.cpp:(.text+0x1e): undefined reference to `testing::InitGoogleTest(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 

main.cpp

#include "gtest/gtest.h" 

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

Test.cpp

#include "gtest/gtest.h" 
#include "Testable.h" 

TEST(GetTwoTest, Two) { 
    EXPECT_EQ(2, GetTwo()); 
} 

Testable.cpp

#include "Testable.h" 

int GetTwo() { 
    return 3; 
} 

Aquí está mi archivo CMakeLists.txt:

cmake_minimum_required(VERSION 2.6) 

SET(CMAKE_CXX_FLAGS "-std=gnu++11") #Turn on C++11 Support 

set(FILES_TO_TEST Testable.cpp) 
set(UNIT_TESTS Test.cpp) 
set(MAIN_FILE main.cpp) 

add_subdirectory(gtest) #Build all the gtest stuff 
include_directories(gtest/include) 
include_directories(.) 
add_library(codeToTest ${FILES_TO_TEST}) 

add_executable(Proj2 ${MAIN_FILE}) 
target_link_libraries(Proj2 codeToTest) 

add_executable(unit-test ${UNIT_TESTS}) 
target_link_libraries(unit-test gtest gtest_main rt pthread codeToTest) 
+0

se agregó la etiqueta cmake – PiotrNycz

+0

Tenga en cuenta que Google recomienda que NO construya una biblioteca, sino que incluya el código GTest en su proyecto. Consulta https://code.google.com/p/googletest/wiki/FAQ#Why_is_it_not_recommended_to_install_a_pre-compiled_copy_of_Goog – Mawg

Respuesta

8

Su configuración parece ser casi correcta. Sin embargo, necesita tener 2 funciones separadas main; uno para el ejecutable real Proj2 y otro con el gtest incluye y funciones para el ejecutable de prueba unit-test.

Puede hacer esto teniendo 2 archivos main.cpp diferentes, digamos main.cpp y test_main.cpp. El que ha mostrado sería test_main.cpp y se incluiría en el comando add_executable(unit-test ....

Su nueva main.cpp no ​​tendría referencias para gtest, ya sea incluye o funciones.

+0

Gracias, ese fue mi problema. Estaba usando gtest_main en el archivo CMakeLists, así que solo tuve que eliminar las funciones gtest en mi main.cpp. – Vance

5

De errores de enlace, es obvio que no lo vincula GTEST biblioteca a su programa de pruebas.

Ver http://code.google.com/p/googletest/wiki/Primer

Para escribir un programa de prueba a través de Google prueba, necesita compilar Google prueba en una biblioteca y vincular su prueba con él. ...

Solo tiene que ver este documento para obtener detalles sobre su compilador y sistema.

+1

Gracias por la ayuda. Leí el enlace que me proporcionó, pero pareció omitir los detalles sobre cómo vincular correctamente la biblioteca gtest (ya que no estoy usando un IDE). Usé CMake para generar los archivos de compilación, así que ahí es donde debería tener lugar la vinculación, ¿no? Proporcioné mi archivo CMakeLists.txt para mayor aclaración – Vance

+1

Siga este enlace: http://stackoverflow.com/questions/8507723/how-to-start-working-with-gtest-and-cmake – PiotrNycz

Cuestiones relacionadas