c++ - विज़ुअल स्टूडियो 2013 में सी++ प्रोजेक्ट में Google परीक्षणों को कैसे संकलित और लिंक किया जा सकता है, लेकिन क्या NuGet पैकेज प्रबंधक द्वारा Gtest स्थापित किया गया है?




visual-studio linker (2)

मेरे पास विंडोज 7 पर माइक्रोसॉफ्ट विज़ुअल स्टूडियो 2013 कम्युनिटी संस्करण है। मैं हेडर और बायनेरी डाउनलोड करने या अपने द्वारा कंपाइल करने के बजाय सी ++ के लिए सीट के लिए जीट और जीएमॉक को स्थापित करना चाहता हूं।

मुझे टूल> न्यूजेट पैकेज मैनेजर> समाधान के लिए न्यूगेट्स पैकेज प्रबंधित करें मैंने ऑनलाइन चुना है, फिर टाइप किया गेस्ट खोज परिणामों से मैंने Google टेस्ट पाया है, इसलिए मैंने अपने मौजूदा प्रोजेक्ट के लिए इसे स्थापित कर लिया है I स्थापना के बाद नीचे दिए गए कोड को संकलित किया गया है:

#include <iostream>
#include <gtest\gtest.h>

using namespace std;
using namespace ::testing;

int factorian(int n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return n*factorian(n - 1);
}

TEST(factorianTest, simpleTest)
{
    ASSERT_EQ(1, factorian(0));
    ASSERT_EQ(1, factorian(1));
    ASSERT_EQ(2, factorian(2));
}

int main(int argc, char* argv[])
{
    InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

लेकिन यह लिंक नहीं है:

त्रुटि 1 त्रुटि LNK2019: अनसुलझे बाहरी प्रतीक "bool __cdecl परीक्षण :: आंतरिक :: IsTrue (bool)" (? IsTrue @ @ आंतरिक @ परीक्षण @ @ YA_N_N @ Z) फ़ंक्शन में संदर्भित "सार्वजनिक: शून्य __thiscall परीक्षण :: आंतरिक :: scoped_ptr , class std :: allocator>> :: रीसेट (क्लास std :: basic_string, class std :: allocator> *) "(? reset @? $ scoped_ptr @ वी? $ मूल_स्ट्रिंग @ डीयू? $ char_traits @ D @ std @@ वी? $ संभाजक @ डी @ 2 @@ एसटीडी @@@ आंतरिक @ परीक्षण @@ QAEXPAV? $ basic_string @ ड्यू? $ char_traits @ डी @ एसटीडी @@ वी? $ संभाजक @ डी @ 2 @@ एसटीडी @@@ जेड) c: \ Users \ Grzegorz \ documents \ विज़ुअल स्टूडियो 2013 \ प्रोजेक्ट \ tmp \ tmp \ Source.obj tmp

तो मैंने खोला: परियोजना गुण> कॉन्फ़िगरेशन गुण> लिंकर> इनपुट और मैंने जोड़ा: gtest.lib लेकिन दुर्भाग्य से मैं देख रहा हूँ:

त्रुटि 1 त्रुटि LNK1104: फ़ाइल 'gtest.lib' c: \ Users \ Grzegorz \ documents \ विज़ुअल स्टूडियो 2013 \ Projects \ tmp \ tmp \ LINK tmp नहीं खोल सकता

जब मैं फ़ाइल के लिए पूर्ण पथ जोड़ता हूं (मुझे पता है कि मुझे नहीं करना चाहिए) अजीब त्रुटियां हैं:

त्रुटि 2 त्रुटि LNK2005: "सार्वजनिक: __thiscall std :: _ कंटेनर_बेस 12 :: _ कंटेनर_बेस 12 (शून्य)" (?? 0_Container_base12 @ std @@ QAE @ XZ) पहले से ही gtestd.lib (gtest-all.obj) में परिभाषित किया गया है c: \ users \ Grzegorz \ documents \ विज़ुअल स्टूडियो

2013 \ प्रोजेक्ट्स \ tmp \ tmp \ msvcprtd.lib (MSVCP120D.dll) tmp

तो मेरा सवाल है कि विजुअल स्टूडियो 2013 में सी ++ प्रोजेक्ट में Google परीक्षणों को कैसे संकलित और लिंक किया जाए, लेकिन नूगेट पैकेज मैनेजर द्वारा जीटीस्ट द्वारा स्थापित किया गया है?


मुझे एक हल मिल गया है: जब मैंने पैकेज को खोजने के लिए कई पैकेज मिलते हैं, तो मैं नेटसेट पैकेज मैनेजर में gtest टाइप करता हूं:

  1. Google टेस्ट
  2. FIX8 जीटाइट निर्भरता प्रतीक
  3. FIX8 जीटाइस्ट निर्भरता

इसलिए मैंने FIX8 जीटाइस्ट निर्भरता भी स्थापित की है। और लिंकिंग त्रुटि गायब हो गई।


Google टेस्ट न्यूगेट पैकेज में केवल स्थिर लिंक के लिए प्रीबिल्ल्ट लाइब्रेरी है, लेकिन पैकेट के लिंक विकल्प के लिए एक डिफ़ॉल्ट प्रारंभकर्ता "गतिशील" है।

Project properties 
-> Configuration properties 
-> Referenced packages 
-> gtest 
-> Linkage: set to "Static"

और gtest.lib मैन्युअल रूप से जोड़ नहींें





googletest