2013-03-16 9 views
5

Attualmente sto imparando come creare e utilizzare MakeFiles per i programmi in C++. Sono stato in grado di creare ed eseguire Makefiles per le normali classi .cpp ma sto riscontrando un problema con le classi di test. Per il test Sto usando GTEST in Code :: Blocks, e nel mio file Test_A.cpp nelle "Impostazioni Linker" aggiungo:Comprese le librerie gtest nei Makefile per i file di test delle unità:

/usr/lib/libgtest.a 
/usr/lib/libgtest_main.a 

e per le altre opzioni del linker ho messo "-pthread". So che in qualche modo queste librerie devono essere aggiunte nel makefile, ma non riesco a capire come. Ho inizialmente pensato hanno bisogno di essere aggiunto in linea 3, ma tutto ciò che cerco migliaia rendimenti delle linee di errore di tipo:

undefined reference to `testing::Test::TearDown() 
undefined reference to `testing::Test::~Test() etc.... 

mio makefile:

1. all: Test 

2. Test_A.o: Test_A B.h 
3.  g++ -c Test_A.cpp -o Test_A.o 

4. Test: Test_A.o 
5.  g++ -o Test Test_A.o 

6. clean: 
7.  rm -rf *o *~ 

risposta

6

biblioteche sono aggiunti sulla linea link:

g++ -o Test Test_A.o /usr/lib/libgtest.a /usr/lib/libgtest_main.a -lpthread 
6

È necessario passare l'elenco dei nomi di librerie al linker quando si costruisce l'ultimo binario. LDFLAGS è una variabile utilizzata nei Makefile per indicare l'elenco di flag passati al linker.

  • Per collegare contro una libreria libabc.a o libabc.so, è necessario passare il flag del linker come -labc.

  • Per specificare la posizione delle librerie, è necessario utilizzare il flag -L. Nota che il linker cerca anche le directory in LD_LIBRARY_PATH per le tue librerie oltre alle directory definite in /etc/ld.so.conf.

Anche se -L/usr/lib è opzionale nel tuo caso, (dal momento che la vostra distribuzione avrebbe dovuto configurato il ld.so.conf per raccogliere le librerie da /usr/lib già), ho mostrato qui sotto nel caso in cui si desidera modificare in una posizione diversa.

LDFLAGS := -lpthread -lgtest -lgtest_main -L/usr/lib 

all: Test 

Test_A.o: Test_A B.h 
    g++ -c Test_A.cpp -o Test_A.o 

Test: Test_A.o 
    g++ -o Test Test_A.o $(LDFLAGS) 

clean: 
    rm -rf *o *~ 
+0

ho dovuto mettere -lpthread DOPO -lgtest_main.a, come da https://stackoverflow.com/questions/10315016/error-during-making-gtest – Will