2016-01-13 9 views
5

के साथ विजुअल स्टूडियो 2015 और क्लैंग 3.7 के साथ Google टेस्ट नहीं बना सकता है, मैं Google टेस्ट सफलतापूर्वक नहीं बना सकता। मैं निम्नलिखित त्रुटियाँ मिलती है:वीएस 2015 और इसके नए अंतर्निर्मित क्लैंग टूलसेट/प्रोजेक्ट टेम्पलेट का उपयोग करके माइक्रोसॉफ्ट कोडजीन

Error  use of undeclared identifier 'chdir'; did you mean '_chdir'?  
Error  use of undeclared identifier 'fdopen' 
Error  use of undeclared identifier 'read' 
Error  use of undeclared identifier 'write'  
Error  use of undeclared identifier 'close' 
Error  use of undeclared identifier 'O_RDONLY' 
Error  use of undeclared identifier 'O_APPEND' 
Error  use of undeclared identifier 'dup'; did you mean '_dup'? 
Error  use of undeclared identifier 'creat'; did you mean '_creat'? 

मैंने देखा है कि उन घोषणाओं के बहुमत इन एएनएसआई जाँच ब्लॉक के भीतर कर रहे हैं:

#if !__STDC__ 
... 
#endif 

वहाँ एक परियोजना स्थापित करने या कुछ और मैं इन तरीकों प्राप्त करने के लिए बदल सकते हैं है हल करना?

उत्तर

1

मुझे chdir और freopen के साथ समान समस्याओं का सामना करना पड़ा।

मैं Google द्वारा प्राप्त किए गए कदमों और वीएस2015 और क्लैंग के साथ चलने के लिए केवल मेरे द्वारा उठाए गए चरणों को पोस्ट करूंगा।

  • विंडोज़ के लिए एक एलएलवीएम स्नैपशॉटबिल्ड प्राप्त करें। http://llvm.org/builds/
    (सुनिश्चित करें कि आप सही संस्करण (32/64-बिट) को डाउनलोड कर लें)

यह हाल ही में एक (v3.9 लेखन के समय) बजना का संस्करण स्थापित हो जाएगा। ध्यान रखें कि यह एक स्नैपशॉट निर्माण है और आधिकारिक रिलीज नहीं है।

यदि आपको स्नैपशॉट बिल्ड पसंद नहीं है, तो शायद नवीनतम रिलीज़ संस्करण आज़माएं। मैंने इसका परीक्षण नहीं किया। मुझे बस अद्यतित टूल्स रखना पसंद है, खासकर जब वे एलएलवीएम/क्लैंग की तरह तेजी से विकसित होते हैं।

  • स्थापना के बाद आपको विजुअल स्टूडियो प्रोजेक्ट गुणों में प्रविष्टियां मिलनी चाहिए। Properties ->General ->Platform Tools ->LLVM-vs2014 (और अधिक) (LLVM-vs2014 में स्विच करें)

मुझे पता है कि आप Microsoft CodeGen साथ बजना 3.7 के लिए पूछ रहे हैं रहा हूँ। आपको अपने आप पर फैसला करना होगा।
इसके अलावा, मैं कोड में कुछ फिक्स/परिवर्तन लागू नहीं करना चाहता था जिसे मैंने नहीं लिखा था या नहीं जानता था। चूंकि यह मेरे लिए ठीक काम करता है, मैंने किसी और समस्या की जांच नहीं की।

इस बिंदु पर यह आपके लिए पहले से ही काम कर सकता है। अगले चरण Googletest पुस्तकालयों का निर्माण करने और परियोजना में निर्देशिका शामिल करने का वर्णन करते हैं।

  • github से googletest प्राप्त करें। https://github.com/google/googletest

  • सेमेक-गुई चलाएं और Googletest को बनाने में सक्षम होने के लिए कॉन्फ़िगर करें।

    जनरेटर: दृश्य स्टूडियो 14 2015 Win64 (मैं केवल 64 बिट का इस्तेमाल किया, आप भी कोशिश 32 बिट कर सकते हैं)

From the llvm documentation
(no link because not enough reputation: clang.llvm.org/docs/MSVCCompatibility.html):

First, Clang attempts to be ABI-compatible, meaning that Clang-compiled code should be able to link against MSVC-compiled code successfully.

  • डिफ़ॉल्ट उपयोग देशी compilers

कहाँ स्रोत है कोड: (उदा। C:\libs\googletest\googletest)
(क्योंकि शीर्ष निर्देशिका में googlemock भी है)

बाइनरी बनाने के लिए कहां: (उदा। C:\libs\googletest\build)

  • सही का निशान हटाएँ: अगर आप चाहते हैं BUILD_SHARED_LIBS (साझा libs निर्माण) CMAKE_CONFIGURATION_TYPES: डीबग और रिलीज (यदि आप चाहें तो दूसरों चुनें)
    याद रखें या परिवर्तन:। CMAKE_INSTALL_PREFIX (पूर्व C:\libs\googletest\install)

पाइथन 2.7 सेमेक द्वारा पाया गया था, भले ही मुझे यकीन है कि यह आवश्यक नहीं है।
प्रेस कॉन्फ़िगर करें और जेनरेट करें।

  • समाधान फ़ाइल बनाने के बाद, निर्देशिका ऊपर निर्दिष्ट करने के लिए जाना (बाइनरी, पूर्व निर्माण करने के लिए कहाँ। C:\libs\googletest\build) और समाधान gtest.sln खोलें।

  • डीबग समाधान कॉन्फ़िगरेशन चुनें और राइट क्लिक करें ALL_BUILD और Build। पूर्ण होने पर, इंस्टॉल करें और बनाएं पर राइट क्लिक करें। यह पहले निर्दिष्ट फ़ोल्डर्स बनाता है।

  • CMAKE_INSTALL_PREFIX (उदा। C:\libs\googletest\install) वहाँ में आप libs नाम बदल सकते हैं और अधिलेखित करने से और डेसिग्नेटर कि यह डीबग बिल्ड था के रूप में फाइल रखने के लिए एक * d.lib जोड़ सकते हैं।

  • रिलीज समाधान कॉन्फ़िगरेशन के लिए चरणों को दोहराएं। CMAKE_INSTALL_PREFIX (उदा। C:\libs\googletest\install) में आपको एक निर्देशिका और एक lib निर्देशिका मिलनी चाहिए।

  • गुणों के तहत आपकी परियोजना में -> वीसी ++ निर्देशिकाएं निर्देशिकाएं शामिल करें। CMAKE_INSTALL_PREFIX<b>\include</b> (उदा। C:\libs\googletest\install<b>\include</b>)

  • गुण के तहत अपने परियोजना में -> कुलपति ++ निर्देशिकाएँ लाइब्रेरी निर्देशिकाएँ जोड़ें। CMAKE_INSTALL_PREFIX \ lib:

  • और Properties के तहत ->Linker ->Input ->Additional Dependencies (gtest.lib/gtestd.lib पर निर्भर करता है (उदाहरण के लिए सी \ libs \ googletest \ स्थापित \ lib।) आपकी कॉन्फ़िगरेशन)

इसके बाद मैं अपने परीक्षणों को बनाने और चलाने में सक्षम था।

+0

पागल देर से प्रतिक्रिया के लिए खेद है। मैं अभी अपनी परियोजनाओं से लंबे समय के अंतराल के बाद इस मुद्दे पर वापस आ रहा हूं, और मैं इसे स्वीकार किए गए उत्तर के रूप में चिह्नित करने में संकोच करता हूं, क्योंकि मैं वीएस2015 के अंतर्निर्मित क्लैंग टूलकिट के साथ काम करने के लिए gtest प्राप्त करने की कोशिश कर रहा हूं। मुझे यकीन है कि मैं एक एलएलवीएम स्नैपशॉट बिल्ड पर स्विच कर सकता हूं और इसे ठीक से संकलित कर सकता हूं, और अगर ऐसा हो तो मैं ऐसा कर सकता हूं। (और उस मामले में मैं इस जवाब को सही चिह्नित करूंगा।) – WhittlesJr

1

नए एलएलवीएम/क्लैंग के साथ परेशानियों के कारण परेशानियों के कारण, मैंने वीएस2015, क्लैंग 3.7 और googletest के साथ कुछ समय बिताया।

मैंने Google उत्तर पुस्तकालयों को संकलित किया जैसा कि अन्य उत्तरों में उल्लिखित है। फिर माइक्रोसॉफ्ट कोडेन (v140_clang_3_7) "के साथ क्लैंग 3.7 पर स्विच किया गया ताकि मेरा googletest प्रोजेक्ट बनाया जा सके।

त्रुटि के

नमूना उत्पादन:
.... gtest/आंतरिक/gtest-port.h (2384,35): त्रुटि: अघोषित पहचानकर्ता के 'बंद' उपयोग
इनलाइन पूर्णांक बंद (पूर्णांक fd) {वापसी करीब (FD); }

आप पा सकते हैं माइक्रोसॉफ्ट के प्रलेखन में:

Example with fdopen
fdopen: This POSIX function is deprecated. Use the ISO C++ conformant _fdopen instead.
https://msdn.microsoft.com/en-us/library/ms235351.aspx

यह काफी कुछ और कार्यों के साथ एक ही है।

बस "विजुअल स्टूडियो xxx" के लिए Google, जहां xxx fdopen या chdir है। आपको दस्तावेज़ीकरण का एक लिंक प्राप्त करना चाहिए जहां आप नई विधि पा सकते हैं। (आमतौर पर नाम के सामने एक अंडरस्कोर।)

एक बार जब आप जानते हैं कि क्या उपयोग करना है, तो त्रुटि पर जाएं (वहां जाने के लिए वीएस आउटपुट का उपयोग करें), यहां gtest-port.h (2384,35)।

परिवर्तन करें, यहां
... वापसी बंद करें (एफडी);
से
... वापसी _ बंद (एफडी);
और इसी तरह।

उसके बाद मेरे परीक्षण सामान्य रूप से काम करते थे। कुछ चेतावनियों से छुटकारा पाना पड़ा।

संबंधित मुद्दे