2013-03-16 97 views
5

我目前正在學習如何爲C++程序製作和使用MakeFiles。我已經能夠爲普通的.cpp類創建並運行Makefiles,但是我遇到了測試類的問題。爲了測試我的代碼:: Blocks的使用GTEST,並在「鏈接設置」我的Test_A.cpp文件我補充:將Makefile中的gtest庫包含在單元測試文件中:

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

和其他連接選項,我把「-pthread」。我知道在某些方面需要將這些庫添加到makefile中,但我無法想象如何。我原本以爲他們需要在第3行以復加,但一切我嘗試類型的錯誤的行返回上千:

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

我的生成文件:

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 *~ 

回答

6

庫是在鏈接行補充說:

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

當構建最終的二進制文件時,您需要將庫名稱列表傳遞給鏈接器。 LDFLAGS是Makefiles中用於指示傳遞給鏈接器的標誌列表的變量。

  • 要對鏈接庫libabc.alibabc.so,你需要通過鏈接器標誌爲-labc

  • 要指定庫的位置,您需要使用-L標誌。請注意,除/etc/ld.so.conf中定義的目錄之外,鏈接器還會搜索LD_LIBRARY_PATH中的目錄庫。

雖然-L/usr/lib你的情況可選的,(因爲你的發行版應該已經配置了ld.so.conf中拿起從/usr/lib已經庫),我展示它下面,以防萬一你想改變它到一個不同的位置。

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

我不得不把-lpthread AFTER -lgtest_main.a,按照https://stackoverflow.com/questions/10315016/error-during-making-gtest – Will 2017-07-08 09:50:04

相關問題