लिनक्स पर एक साझा पुस्तकालय के रूप में googleTest कैसे सेट करें


87

डेबियन अब gTest के लिए कोई पूर्व-निर्मित पैकेज प्रदान नहीं करती है। उनका सुझाव है कि आप अपनी परियोजना के मेकफाइल में रूपरेखा को एकीकृत करें। लेकिन मैं अपने मेकअप को साफ रखना चाहता हूं। मैं पूर्व संस्करणों (<1.6.0) की तरह gTest कैसे सेट करूं, ताकि मैं लाइब्रेरी के खिलाफ लिंक कर सकूं?


2
BTW, gtest बिल्ड को ऑटोटूल का उपयोग करके प्रबंधित किया जाता है इसलिए मानक ./configure && make && make installवर्कफ़्लो को ठीक काम करना चाहिए। मुझे यकीन नहीं है कि यह वारंट एक पोस्ट है क्योंकि यह स्रोत से कई अन्य पैकेजों को संकलित करने से अलग नहीं होगा।
शॉन चिन

7
मुझे लगता है कि सभी उपयोगकर्ता आपके जैसे अनुभवी नहीं हैं। मैं हाल ही में विंडोज से लिनक्स पर आया था और मुझे StackOverflow पर ऐसा कुछ पाकर खुशी हुई होगी।
मैनुएल श्नाइड 3r 24'12

1
ध्यान दें कि Google अनुशंसा करता है कि आप एक पुस्तकालय का निर्माण न करें, लेकिन इसके बजाय अपनी परियोजना में GTest कोड शामिल करें। देखें code.google.com/p/googletest/wiki/...
Mawg को फिर से बहाल मोनिका का कहना है कि

जवाब में पहला नोट थॉट्स।
मैनुएल श्नाइड 3r

1
@Mawg द्वारा प्रदान किया गया लिंक टूट गया है (विकी हटा दिया गया था), यह काम करने लगता है लेकिन एक ऐसे पृष्ठ की ओर इशारा करता है जो अब विषय पर नहीं है (काफी भ्रमित करने वाला)। प्रतिस्थापन के रूप में मुझे जो सबसे अच्छा मिल सकता है वो ये हैं कि निर्माण निर्देश: github.com/google/googletest/blob/master/googletest/README.md हालाँकि यह बताता है कि कैसे cmake के साथ निर्माण किया जाता है। ऑटोटॉल्स के लिए, मुझे सबसे अच्छा काम करने के लिए निम्नलिखित उत्तर मिला: stackoverflow.com/a/36000856/1487069
कार्लो वुड

जवाबों:


143

इससे पहले कि आप सुनिश्चित करें कि आपके Google से इस नोट को पढ़ा और समझा है ! यह ट्यूटोरियल गिएस्ट का उपयोग करना आसान बनाता है, लेकिन गंदा कीड़े का परिचय दे सकता है ।

1. Googletest ढांचे को प्राप्त करें

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

या इसे हाथ से प्राप्त करें । मैं इसे थोड़ा कैसे बनाए रखूंगा, इसलिए यदि आप इस पर अड़ गए हैं और लिंक पुरानी हैं, तो इसे संपादित करने के लिए स्वतंत्र महसूस करें।

2. अनपैक करें और Google परीक्षण बनाएं

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

3. अपने सिस्टम पर हेडर और लिबास को "इंस्टॉल करें"।

यह चरण डिस्ट्रो से डिस्ट्रो तक भिन्न हो सकता है, इसलिए सुनिश्चित करें कि आप हेडर और लिबास को सही डायरेक्टरी में कॉपी करते हैं। मैंने यह जाँच कर यह पूरा किया कि डेबियन के पूर्व gtest लिबास कहाँ थे। लेकिन मुझे यकीन है कि ऐसा करने के बेहतर तरीके हैं। नोट: make installखतरनाक है और समर्थित नहीं है

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

4. लिंकर का कैश अपडेट करें

... और जाँच करें कि क्या GNU लिंकर को काम के बारे में पता है

sudo ldconfig -v | grep gtest

यदि आउटपुट इस तरह दिखता है:

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

तब सब ठीक है।

gTestframework अब उपयोग करने के लिए तैयार है। बस -lgtestलिंकर फ्लैग और वैकल्पिक रूप से सेटिंग करके लाइब्रेरी के खिलाफ अपने प्रोजेक्ट को लिंक करना न भूलें , यदि आपने अपना टेस्ट मेनरूटीन, स्पष्ट -lgtest_mainध्वज नहीं लिखा है ।

यहाँ से आप Googles के दस्तावेज़ और पुराने डॉक्स के बारे में जानना चाहते हैं कि यह कैसे काम करता है। हैप्पी कोडिंग!

संपादित करें: यह OS X के लिए भी काम करता है! "ओएस एक्स पर googleTest कैसे ठीक से सेटअप करें" देखें


2
क्या कोई make installलक्ष्य नहीं है जिसे आप लाइब्रेरी और हेडर को मैन्युअल रूप से कॉपी करने के बजाय उपयोग कर सकते हैं?
शॉन चिन

13
'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
मेकफाइल

क्या 1.8.0 संस्करण में फ़ाइलों का नाम बदल दिया गया है? include/gtestजहाँ तक मैं बता सकता हूँ वहाँ कोई नहीं है ।
नुबेक

2
आपका पोस्ट पुराना है। कृपया लोगों को गुमराह न करें, sudo cp -a libgtest_main.so libgtest.so /usr/lib/अब काम नहीं करता। फ़ाइल के साथ शुरू करने के लिए भी नहीं है।
शुत्ज़े

मैं यह भी जानना चाहता हूं कि डेबियन ने एक पूर्व-स्थापित साझा लाइब्रेरी को क्यों हटाया (उन्होंने अपस्ट्रीम की सिफारिशों के अनुसार ऐसा किया: बग्सडेबियन . org / cgi-bin / bugreport.cgi ? bug=802587 )। हालांकि वहां दिया गया विकी लिंक मौजूद नहीं है। तो यह मामला क्यों था?
कार्लो वुड

33

इसका उत्तर विशेष रूप से ubuntu उपयोगकर्ताओं के लिए देता हूँ। सबसे पहले gtest development package install करके शुरू करें।

sudo apt-get install libgtest-dev

ध्यान दें कि यह पैकेज केवल स्रोत फ़ाइलों को स्थापित करता है। आपको आवश्यक लाइब्रेरी फ़ाइलों को बनाने के लिए कोड को स्वयं संकलित करना होगा। ये स्रोत फाइलें / usr / src / gtest पर स्थित होनी चाहिए। इस फ़ोल्डर में ब्राउज़ करें और लाइब्रेरी संकलित करने के लिए cmake का उपयोग करें:

sudo apt-get install cmake # install cmake
cd /usr/src/gtest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo make install

अब अपने कार्यक्रमों को संकलित करने के लिए, जो gtest का उपयोग करता है, आपको इसे इसके साथ जोड़ना होगा:

-lgtest -lgtest_main -lpthread

इसने मेरे लिए पूरी तरह से Ubuntu 14.04LTS पर काम किया।


1
वास्तव में आपको पुस्तकालयों को मैन्युअल रूप से कॉपी करने की आवश्यकता नहीं है, इसके लिए मेकफाइल में एक लक्ष्य है। आप बस इसे इस तरह से कर सकते हैं: sudo apt-get install cmake # install cmake cd / usr / src / gtest sudo cmake CMakeLists.txt sudo make install जिसे बनाया जाना चाहिए और कॉपी / usr / लोकल /
लीब

1
@AlexanderZinovyev मुझे "बनाना: *** लक्ष्य 'स्थापित करने के लिए कोई नियम नहीं है। बंद करो।" जब मैं "sudo make install"
m4l490n

2
"सुडो मेक इनस्टॉल" उबंटू 18.04 पर काम किया, लेकिन उबंटू 16.04 पर काम नहीं किया।
अहमद नासर

1
@AhmedNassar: "sudo make install" बस वही काम करता है जो "sudo cp * .a / usr / lib" करता है। इसलिए, यदि निर्मित
मेकफाइल

मैन्युअल रूप से कोई ज़रूरत नहीं है sudo cp *.a /usr/lib, बस इसे sudo make installठीक करना चाहिए।
लिंगजियानकोंग

26

मुझे यह पता लगाने में थोड़ा समय लगा क्योंकि सामान्य "मेक इनस्टॉल" को हटा दिया गया है और मैं cmake का उपयोग नहीं करता हूं। यहाँ मेरा अनुभव साझा करने का है। काम पर, मेरे पास लिनक्स पर रूट एक्सेस नहीं है, इसलिए मैंने अपने होम डायरेक्टरी के तहत Google टेस्ट फ्रेमवर्क स्थापित किया है ~/usr/gtest/:।

पैकेज को ~ / usr / gtest / साझा पुस्तकालयों में स्थापित करने के लिए, साथ ही साथ नमूना निर्माण के साथ:

$ 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

स्थापना को मान्य करने के लिए, एक साधारण परीक्षण उदाहरण के रूप में निम्नलिखित test.c का उपयोग करें:

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

संकलन करना:

    $ 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 

1
अंतिम पंक्ति के साथ मुझे त्रुटि मिलती है: / usr / bin / ld: /tmp/cczG727X.o: '_ZN7testing4TestC2Ev' प्रतीक के लिए अपरिभाषित संदर्भ। मैंने यह निर्धारित किया है कि पुस्तकालयों से पहले test.cpp को रखा जाए। यानी: g ++ test.cpp -I $ GTEST_HOME / -L $ GTEST_HOME / lib -lgtest -lgtest_main -lpread
user9869932

यदि gtest_main ( lgtest_main) के खिलाफ लिंक किया जा रहा है , mainतो परीक्षण फ़ाइल में अपने स्वयं को परिभाषित करने की कोई आवश्यकता नहीं है ।
गीनो मेम्पिन

10

यदि आप CMake का उपयोग करते हैं, तो आप यहाँExternalProject_Add वर्णित के रूप में उपयोग कर सकते हैं

यह आपको अपने रिपॉजिटरी में gtest स्रोत कोड रखने, या कहीं भी स्थापित करने से बचाता है। यह आपके बिल्ड ट्री में स्वचालित रूप से डाउनलोड और निर्मित होता है।


2

डेबियन / उबंटू के लिए अपडेट

Google मॉक (पैकेज:) google-mockऔर Google टेस्ट (पैकेज libgtest-dev:) को मिला दिया गया है। नया पैकेज कहा जाता है googletest। दोनों पुराने नाम अभी भी बैकवर्ड संगतता के लिए उपलब्ध हैं और अब नए पैकेज पर निर्भर करते हैं googletest

पैकेज रिपॉजिटरी से अपने पुस्तकालयों को प्राप्त करने के लिए, आप निम्न कार्य कर सकते हैं:

sudo apt-get install googletest -y
cd /usr/src/googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp googlemock/*.a googlemock/gtest/*.a /usr/lib

उसके बाद, आप -lgmock(या -lgmock_mainयदि आप कस्टम मुख्य विधि का उपयोग नहीं करते हैं) के खिलाफ लिंक कर सकते हैं और -lpthread। कम से कम मेरे मामलों में Google टेस्ट का उपयोग करने के लिए यह पर्याप्त था।

यदि आप Google टेस्ट का सबसे वर्तमान संस्करण चाहते हैं, तो इसे github से डाउनलोड करें। उसके बाद, चरण समान हैं:

git clone https://github.com/google/googletest
cd googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp lib/*.a /usr/lib

जैसा कि आप देख सकते हैं, पुस्तकालयों के निर्माण का मार्ग बदल गया है। ध्यान रखें कि नया पथ पैकेज रिपॉजिटरी के लिए जल्द ही मान्य हो सकता है।

पुस्तकालयों को मैन्युअल रूप से कॉपी करने के बजाय, आप उपयोग कर सकते हैं sudo make install। यह "वर्तमान में" काम करता है, लेकिन ध्यान रखें कि यह हमेशा अतीत में काम नहीं करता था। साथ ही, इस कमांड का उपयोग करते समय आपके पास लक्षित स्थान पर नियंत्रण नहीं होता है और आप प्रदूषित नहीं करना चाहते हैं /usr/lib


1

मैं भी इस स्थिति से अभिभूत था और इसके लिए अपना खुद का उबंटू स्रोत पैकेज बना रहा था। ये स्रोत पैकेज आपको आसानी से एक बाइनरी पैकेज का उत्पादन करने की अनुमति देते हैं। वे इस पोस्ट के नवीनतम gtest और gmock स्रोत पर आधारित हैं।

Google टेस्ट DEB स्रोत पैकेज

Google मॉक DEB स्रोत पैकेज

बाइनरी पैकेज बनाने के लिए ऐसा करें:

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

यह आपको बता सकता है कि आपको कुछ पूर्व-आवश्यकता वाले पैकेजों की आवश्यकता है, जिस स्थिति में आपको उन्हें स्थापित करने की आवश्यकता है। इसके अलावा, निर्मित .deb बाइनरी पैकेज तब मूल निर्देशिका में बैठे होना चाहिए।

GMock के लिए, प्रक्रिया समान है।

साइड नोट के रूप में, मेरे स्रोत पैकेज के लिए विशिष्ट नहीं है, जब आपके यूनिट टेस्ट में gtest को लिंक करते समय, सुनिश्चित करें कि gtest को पहले शामिल किया गया है ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) यह ऐसा लगता है जैसे आम गोत्र।


जब मैं संकलन करने का प्रयास करता हूं तो आपका पैकेज मुझे त्रुटियाँ देता है। किसी भी कारण से ?? यहाँ मेरा लॉग टेस्ट है। सीपीसी :( पाठ + 0x57): testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to परीक्षण के लिए अपरिभाषित संदर्भ :: आंतरिक :: AssertHelper :: AssertHelper (परीक्षण :: TestPartResult :: प्रकार, char const *, int, charles *) परीक्षण। cpp :( .पाठ + 0x97): अपरिभाषित संदर्भ `परीक्षण :: आंतरिक :: AssertHelper :: ऑपरेटर = (परीक्षण :: संदेश कास्ट &) कॉन्स्ट '... इसकी इतनी लंबी है कि मैं पूरी बात पोस्ट नहीं कर सकता। मैंने एक नए उबंटू 14.04 वीएम में ऐसा किया, इसलिए आवश्यक निर्भरताओं के अलावा और कुछ भी स्थापित नहीं किया गया था।
ddelnano 19

@ddelnano हाँ, मैं इस छोटे से Google परीक्षण मणि में भी भाग गया। जाहिर तौर पर साझा पुस्तकालयों का क्रम महत्वपूर्ण है। Gtest को अपनी इकाई परीक्षा से जोड़ते समय, अन्य पुस्तकालयों से पहले gtest सहित प्रयास करें। जब मैंने इस समस्या को मारा, तो इस लिंक ने इसे मेरे लिए हल कर दिया: bbs.archlinux.org/viewtopic.php?id=156639
Nick Weedon

@ddelnano, यह भी कि अगर आपके टेस्ट सूट में 'मुख्य' परिभाषित नहीं है, तो 'gtest_main' के खिलाफ लिंक करना न भूलें।
निक वेडन

मैं किसी भी अन्य पुस्तकालयों में शामिल नहीं था। यह सब मैंने अपनी फाइल में किया #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

जब तक मैंने उस टिप्पणी को पोस्ट नहीं किया, तब तक मैंने ब्लॉग पोस्ट नहीं पढ़ी। यह अब अंत में काम कर रहा है!
ddelnano

1

बस अगर किसी और को मेरी जैसी स्थिति में कल (2016-06-22) हो जाता है और पहले से ही पोस्ट किए गए दृष्टिकोण के साथ भी सफल नहीं होता है - तो Lubuntu 14.04इसने मेरे लिए आदेशों की निम्नलिखित श्रृंखला का उपयोग करके काम किया:

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

आस्कुबंटु का यह जवाब मेरे लिए काम कर रहा है। अन्य विकल्पों की तुलना में कम त्रुटि-प्रवण से अधिक सरल लगता है, क्योंकि यह libgtest-devस्रोतों को प्राप्त करने के लिए पैकेज का उपयोग करता है और वहां से बनाता है: /ubuntu/145887/why-no-library-files-installed-for-google- परीक्षण? answertab = वोट # टैब टॉप

कृपया उस उत्तर का संदर्भ लें, लेकिन एक शॉर्टकट के रूप में मैं यहां भी चरण प्रदान करता हूं:

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/

उसके बाद, मैं अपनी परियोजना का निर्माण कर सका, जो gtestबिना किसी मुद्दे के साथ निर्भर करता है ।


1

निम्न विधि मैन्युअल रूप से /usr/libनिर्देशिका के साथ खिलवाड़ करने से बचती है, जबकि आपकी CMakeLists.txtफ़ाइल में न्यूनतम परिवर्तन की आवश्यकता होती है । यह आपके पैकेज मैनेजर को सफाई से अनइंस्टॉल करने की सुविधा भी देता है libgtest-dev

विचार यह है कि जब आप libgtest-devपैकेज प्राप्त करते हैं

sudo apt install libgtest-dev

स्रोत स्थान में संग्रहीत है /usr/src/googletest

आप बस अपनी CMakeLists.txtउस निर्देशिका को इंगित कर सकते हैं ताकि यह आवश्यक निर्भरता पा सके

बस के FindGTestसाथ बदलेंadd_subdirectory(/usr/src/googletest gtest)

अंत में, यह इस तरह दिखना चाहिए

add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)

0

यह उबंटू / डेबियन आधारित प्रणाली में गूगल टेस्ट और मॉक लाइब्रेरी स्थापित करेगा:

sudo apt-get install google-mock

डेबियन आधारित छवि में Google क्लाउड में परीक्षण किया गया।


हम्म, नहीं, मुझे लगता है कि यह केवल स्थापित करता है googlemock, लेकिन यह स्थापित नहीं होता है googletest(gtest)। कम से कम मेरे साथ तो यही हुआ।
जोताडेपीकस

0

यह gtest और gmock 1.7.0 का निर्माण और स्थापित करेगा:

mkdir /tmp/googleTestMock
tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock
tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock
cd /tmp/googleTestMock
mv googletest-release-1.7.0 gtest
cd googlemock-release-1.7.0
cmake -DBUILD_SHARED_LIBS=ON .
make -j$(nproc)
sudo cp -a include/gmock /usr/include
sudo cp -a libgmock.so libgmock_main.so /usr/lib/
sudo cp -a ../gtest/include/gtest /usr/include
sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/
sudo ldconfig

-1

१..१ के लिए @ ManuelSchneid3r के उत्तर के आधार पर मुझे क्या करना था:

wget github.com/google/googletar xf release-1.8.1.tar.gz 
tar xf release-1.8.1.tar.gz
cd googletest-release-1.8.1/
cmake -DBUILD_SHARED_LIBS=ON .
make

मैंने तब किया था make installजो 1.8.1 के लिए काम करता था, लेकिन @ ManuelSchneid3r के बाद इसका मतलब होगा:

sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/include/gmock /usr/include
sudo cp `find .|grep .so$` /usr/lib/

इसका समय हो गया है कि मैंने यह उत्तर लिखा है, मुझे पता है कि इसके साथ क्या समस्या है अगर आपको लगता है कि इसका कोई मूल्य नहीं है / अमान्य है।
ntg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.