Soru Linux'ta paylaşılan bir kitaplık olarak googleTest nasıl ayarlanır


Debian, artık gTest için önceden derlenmiş paketler sağlamaz. Çerçeveyi proje makefile ile bütünleştirmenizi önerirler. Ama makyaj dosyamı temiz tutmak istiyorum. GTest'i eski sürümleri (<1.6.0) gibi nasıl kurarım, böylece kütüphaneyi aganist olarak bağlayabilir miyim?


76
2017-11-22 13:38


Menşei


Bilginizi ve deneyimini paylaşmanız harika, katkıda bulunduğunuz için teşekkürler. Ancak, bu bir QA sitesidir, bu yüzden sorunuzu bir soru olarak değil, bir rant olarak ifade edin. - Shawn Chin
BTW, gtest yapıları, autotools kullanılarak standart olarak yönetilir ./configure && make && make install iş akışı iyi çalışmalı. Başka bir paketin kaynağından derlenmesinden farklı olmayacağından, bu bir gönderiyi garanti edip etmediğinden emin değilim. - Shawn Chin
Sanırım tüm kullanıcılar senin kadar tecrübeli değil. Son zamanlarda Windows'tan Linux'a geldim ve StackOverflow'ta böyle bir şey bulmaktan mutlu olurdum. - ManuelSchneid3r
Google'ın bir kitaplık oluşturmamanızı ve bunun yerine projenize GTest kodunu eklememenizi tavsiye ettiğini unutmayın. Görmek code.google.com/p/googletest/wiki/... - Mawg
Yanıttaki ilk not budur. - ManuelSchneid3r


Cevaplar:


Başlamadan önce, okuyup anladığınızdan emin olun. Google'dan bu not! Bu öğretici, gtest'i kullanmayı kolaylaştırır, ancak tanıtabilir iğrenç böcek.

1. googletest framework alın

wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz

Ya da olsun el. Bu küçük nasıl devam etmeyeceğim, bu yüzden üzerine tökezlediyseniz ve bağlantılar eskimişse, onu düzenlemekten çekinmeyin.

2. Google testi paketini açın ve oluşturun

tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make

3. Sisteminizdeki üstbilgileri ve lib'leri "yükleyin".

Bu adım, dağıtımdan dağıtmaya farklılık gösterebilir; bu nedenle, üstbilgileri ve lib'leri doğru dizine kopyaladığınızdan emin olun. Bunu kontrol ederek nerede yaptım Debians eski gtest libs bulundu. Ama eminim bunu yapmanın daha iyi yolları vardır. Not: make install tehlikeli ve desteklenmiyor

$ sudo cp -a include/gtest /usr/include
$ sudo cp -a libgtest_main.so libgtest.so /usr/lib/

4. Bağlayıcının önbelleğini güncelleyin

... ve GNU Bağlayıcısını libsleri biliyor mu kontrol edin

$ sudo ldconfig -v | grep gtest

Eğer çıktı böyle görünüyorsa:

libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0

, herşey yolunda.

gTestframework şimdi kullanıma hazırdır. Projenizi ayarlayarak kütüphaneye bağlanmayı unutmayın. -lgtest linker bayrağı olarak ve isteğe bağlı olarak, kendi test mainroutine yazmamışsanız, açık -lgtest_main bayrağı.

Buradan Googles'e gitmek isteyebilirsiniz belgeleme nasıl çalıştığını öğrenmek için çerçeve hakkında. Mutlu kodlar!

Düzenle: Bu OS X için de çalışıyor! Görmek "OS X'te googleTest nasıl düzgün şekilde kurulur?"


125
2017-11-22 13:38



Yok mu make install Kitaplığı ve üstbilgileri el ile kopyalamak yerine kullanabileceğiniz hedef? - Shawn Chin
Makefile çıktısının alıntı: 'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system. - ManuelSchneid3r
Teşekkürler. Ben düzeltilmeyi bekliyorum. - Shawn Chin
Bu bir çekicilik gibi çalıştı. Teşekkür ederim! - gd1
Çok teşekkürler ManuelSchneid3r !!! İyi çalışıyor!! Ama gmock eksik. - sree


Bunu anlamak biraz zaman aldı çünkü normal "make install" işlemi kaldırıldı ve cmake kullanmıyorum. İşte paylaşma deneyimim. İş yerinde, Linux'ta root erişimim yok, bu yüzden Google test çerçevesini ev dizinim altına kurdum: ~/usr/gtest/.

Paketi, örnek oluşturma ile birlikte ~ / usr / gtest / paylaşılan kütüphaneler olarak yüklemek için:

$ mkdir ~/temp
$ cd ~/temp
$ unzip gtest-1.7.0.zip 
$ cd gtest-1.7.0
$ mkdir mybuild
$ cd mybuild
$ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" ..
$ make
$ cp -r ../include/gtest ~/usr/gtest/include/
$ cp lib*.so ~/usr/gtest/lib

Yüklemeyi doğrulamak için, basit bir test örneği olarak aşağıdaki test.c'yi kullanın:

    #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();
    }

Derlemek için:

    $ 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 

24
2018-01-23 16:33



Son satırda hata alıyorum: / usr / bin / ld: /tmp/cczG727X.o: '_ZN7testing4TestC2Ev' sembolüne tanımlanmamış referans. Kütüphanelerden önce test.cpp'yi yerleştirdim. i.e: g ++ test.cpp -I $ GTEST_HOME / dahil -L $ GTEST_HOME / lib -lgtest -lgtest_main -lpthread - xyz
Doğrulama örneği için teşekkürler - p1nkrock


Bu ubuntu kullanıcıları için özellikle cevap vereyim. İlk olarak gtest geliştirme paketini kurarak başlayın.

sudo apt-get install libgtest-dev

Bu paketin sadece kaynak dosya yüklediğini unutmayın. Gerekli kütüphane dosyalarını oluşturmak için kodu kendiniz derlemelisiniz. Bu kaynak dosyalar / usr / src / gtest adresinde bulunmalıdır. Bu klasöre göz atın ve kütüphaneyi derlemek için cmake kullanın:

sudo apt-get install cmake # install cmake
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make

# copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder
sudo cp *.a /usr/lib

Şimdi, gtest kullanan programlarınızı derlemek için şununla bağlantı kurmalısınız:

-lgtest -lgtest_main

Bu Ubuntu 14.04LTS üzerinde benim için mükemmel çalıştı.


17
2018-01-31 09:43



Aslında kütüphaneleri el ile kopyalamak zorunda değilsiniz, Makefile'de bunun için bir hedef var. Şöyle yapabilirsin: sudo apt-get install cmake # install cmake cd / usr / src / gtest sudo cmake CMakeLists.txt sudo make install Yapılması ve kopyalanması gerekir / usr / local / lib / - Alexander Zinovyev
@AlexanderZinovyev "make: *** Hedef 'install' yapmak için kural yok. Dur." "sudo make install" ı çalıştırdığımda - m4l490n
"sudo make install", Ubuntu 18.04 üzerinde çalıştı, ama Ubuntu 16.04 üzerinde çalışmadı. - Ahmed Nassar


CMake kullanıyor iseniz, kullanabilirsiniz ExternalProject_Add tarif edildiği gibi İşte.

Bu, kaynak kodunuzu depoda tutmak veya herhangi bir yere yüklemek zorunda kalmanızı önler. Yapı ağacınıza otomatik olarak indirilir ve yüklenir.


7
2017-11-22 13:51





Benzer şekilde bu durumdan etkilendim ve bunun için kendi Ubuntu kaynak paketlerimi hazırladım. Bu kaynak paketleri, kolayca ikili bir paket üretmenizi sağlar. Bu yayının son gtest & gmock kaynağına dayanıyorlar.

Google Test DEB Kaynak Paketi

Google Mock DEB Kaynak Paketi

İkili paketi kurmak için şunu yapın:

tar -xzvf gtest-1.7.0.tar.gz
cd gtest-1.7.0
dpkg-source -x gtest_1.7.0-1.dsc
cd gtest-1.7.0
dpkg-buildpackage

Önkoşul gerektiren bazı paketlere ihtiyaç duyduğunuzu söyleyebiliriz, bu durumda bunları yüklemeniz yeterlidir. Bunun dışında, yerleşik .deb ikili paketleri daha sonra üst dizinde oturmalıdır.

GMock için süreç aynıdır.

Bir yan not olarak, kaynak paketlerime özgü olmamakla birlikte, gtest'i birim testinize bağladığınızda, ilk olarak söz konusu öğenin dahil edildiğinden emin olun (https://bbs.archlinux.org/viewtopic.php?id=156639) Bu ortak bir gotcha gibi görünüyor.


1
2018-03-26 13:32



Derlemeyi denediğimde paketiniz bana hata veriyor. Herhangi bir sebep neden ?? işte benim günlük test.cpp :(. text + 0x57): tanımlanmamış başvuru testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to test :: internal :: AssertHelper :: AssertHelper (test :: TestPartResult :: Tür, char const *, int, char const *) 'test.cpp :(. text + 0x97): <test :: undefined referans :: iç: : AssertHelper :: operator = (test :: Message const &) const '... o kadar uzun ki tüm şeyi yayınlayamıyorum. Bunu yepyeni bir Ubuntu 14.04 VM'de yaptım, böylece gerekli bağımlılıklar dışında hiçbir şey yüklenmedi. - ddelnano
@ddelnano Evet, bu küçük google test gemine de rastladım. Görünüşe göre paylaşılan kütüphanelerin sırası önemlidir. Gtest'i birim testinize bağlarken, diğer kitaplıklardan önce gtest'i dahil etmeyi deneyin. Bu soruna baktığımda, bu bağlantı benim için çözdü: bbs.archlinux.org/viewtopic.php?id=156639 - Nick Weedon
@ddelnano, eğer test paketinizde 'ana' tanımlı değilse, 'gtest_main' ile bağlantı kurmayı da unutmayın. - Nick Weedon
Başka kütüphaneler eklemedim. bu benim dosyamda vardı. #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(); } - ddelnano
Nevermind Ben bu yazıyı yayınladıktan sonra blog yazısı okumadım. Şimdi nihayet çalışıyor! - ddelnano


Sadece bir başkasının dün benim gibi aynı duruma düşmesi durumunda (2016-06-22) ve aynı zamanda şimdiye kadar yayınlanan yaklaşımlarla başaramaz. Lubuntu 14.04 Aşağıdaki komutları kullanarak benim için çalıştı:

git clone https://github.com/google/googletest
cd googletest
cmake -DBUILD_SHARED_LIBS=ON .
make
cd googlemock
sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/
sudo ldconfig

1
2018-06-23 14:30





Askubuntu'nun bu cevabı benim için işe yarayan şeydi. Paket kullandığı için diğer seçeneklerden daha az hataya eğilimli görünüyor libgtest-dev kaynakları almak ve oradan inşa etmek: https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top

Lütfen bu cevaba bakın, ancak bir kısayol olarak burada da adımları sağlarım:

sudo apt-get install -y libgtest-dev
sudo apt-get install -y cmake
cd /usr/src/gtest
sudo cmake .
sudo make
sudo mv libg* /usr/lib/

Ondan sonra, projeme dayanarak devam edebilirim. gtest hiçbir sorun olmadan.


1
2017-12-24 07:09





Bu, Ubuntu / Debian tabanlı sistemde google test ve sahte kütüphane kuracaktır:

sudo apt-get install google-mock

Debian tabanlı görüntüde google bulutta test edildi.


0
2017-11-11 22:42



Hmm, hayır, bence bu sadece yükleme googlemockama yüklemez googletest (GTEST). En azından bana olan buydu. - jotadepicas