2013-03-16 17 views
5

Şu anda C++ programlarında MakeFiles'ın nasıl yapılacağını ve nasıl kullanılacağını öğreniyorum. Makefiles'i normal .cpp sınıfları için oluşturup çalıştırabilirim, ancak test sınıfları ile ilgili bir sorun yaşıyorum. Test için ben Code :: Blocks içinde GTEST kullanıyorum ve "Bağlayıcı Ayarları" benim Test_A.cpp dosyasında ben eklemek: Birim test dosyaları için Makefiles'de gtest kitaplıkları dahil:

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

ve diğer bağlayıcı seçenekleri için

ben "-pthread" koydu. Bir şekilde bu kütüphanelerin makefile eklenmesi gerektiğini biliyorum, ama nasıl olduğunu anlayamıyorum. Başlangıçta onlar çizgi 3'te eklenmesi gerekir, ama her şey tip hatası hatlarının döner binlerce deneyin:

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

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

cevap

6

Kütüphaneler bağlantı hattı üzerinde eklenir:

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

Son ikili dosyayı oluştururken kitaplık adlarının listesini bağlayıcıya iletmeniz gerekir. LDFLAGS Makefiles'te linker'e iletilen bayrakların listesini belirtmek için kullanılan bir değişkendir.

  • libabc.a veya libabc.so, sen -labc olarak bağlayıcı işareti geçmesi gerekiyor bir kütüphane karşı bağlamak için.

  • kütüphanelerin yerini belirtmek için, -L bayrağını kullanmak gerekir. Bağlayıcı ayrıca /etc/ld.so.conf tanımlanan dizinlere ek olarak kütüphaneler için LD_LIBRARY_PATH dizinleri arar unutmayın. -L/usr/lib rağmen

sizin durumunuzda isteğe bağlıdır (sizin dağıtıma zaten /usr/lib gelen kütüphaneleri almak için ld.so dosyasına yapılandırılmış olması gerekirdi beri), ben değiştirmek istediğiniz sadece durumda altına gösterdikleri farklı bir yere.

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

Ben https://stackoverflow.com/questions/10315016/error-during-making-gtest uyarınca, -lgtest_main.a SONRA -lpthread koymak zorunda – Will