त्रुटियों के रूप में व्यवहार किए बिना चेतावनियों का संकलन कैसे करें?


94

समस्या यह है कि समान कोड जो विंडोज पर अच्छी तरह से संकलित है, उबंटू पर संकलित करने में असमर्थ है। हर बार मुझे यह त्रुटि मिलती है:

cc1: warnings being treated as errors

अब, यह बड़ा कोड आधार है और मुझे सभी चेतावनियों को ठीक करना पसंद नहीं है।

क्या कोई तरीका है जिससे मैं चेतावनी के बावजूद सफलतापूर्वक संकलन कर सकता हूं?


1
मैं दृढ़ता से चेतावनी को ठीक करने की कोशिश कर रहा हूं। तुरंत नहीं तो धीरे-धीरे। एक बार जब आप छुटकारा पा -Werrorलेते हैं, तो आप चेतावनी हटाए जाने के बाद, इसे प्रति-निर्देशिका के आधार पर वापस जोड़ सकते हैं।
13

यहां तक ​​कि अगर आप सफलतापूर्वक संकलित करते हैं, तो यह आपके द्वारा अपेक्षित तरीके से नहीं चल सकता है। मेरे पास कुछ लोग कोड लिखते हैं जो विंडोज पर ठीक काम करता है लेकिन लिनक्स पर तुरंत क्रैश हो जाता है।
डेनिस मेंग

सभी को उनकी उपयोगी टिप्पणियों और उत्तरों के लिए धन्यवाद। आवश्यकता के अनुसार ऐसा लगता है कि मुझे उन सभी चेतावनियों को ठीक करना होगा, जो मैंने शुरू की हैं। लेकिन अब मुझे जो चेतावनी मिल रही है वह sqlite3.c से है: यह मानते हुए कि जब (X - c) <= X मान लिया जाता है तो ओवरफ्लो पर हस्ताक्षर नहीं होता है
सौरभ वर्मा

जवाबों:


83

ज़रूर, पता लगाएँ -Werrorकि सेट कहाँ है और उस झंडे को हटा दें। फिर चेतावनी केवल चेतावनी होगी।


2
धन्यवाद डैनियल, लेकिन मेरी परियोजना में कोई -Werror झंडा सेट नहीं है। क्या मुझे इसे कहीं और देखना चाहिए?
सौरभ वर्मा

13
कहीं न कहीं यह तय किया जाना चाहिए, डिफ़ॉल्ट चेतावनी द्वारा किसी भी संकलक द्वारा त्रुटियों के रूप में नहीं माना जाता है। यदि आप इसे नहीं पा सकते हैं, तो आप इसे ओवरराइड करने की कोशिश कर सकते हैं -Wno-error, जैसा कि नाइटक्रैकर ने सुझाया था। जब तक -Werrorआप CFLAGSमेकफाइल में सेट किए गए झंडे के बाद पारित नहीं हो जाते, तब तक काम करना चाहिए ।
डैनियल फिशर

31

आप सभी चेतावनियों को इस तरह के प्रयोग के रूप में मान सकते हैं -Wno-error। आप विशिष्ट चेतावनी का उपयोग करके इस तरह के रूप में इलाज किया जा रहा कर सकते हैं -Wno-error=<warning name>जहां <warning name>चेतावनी यदि आपको कोई त्रुटि के रूप में व्यवहार नहीं करना चाहते का नाम है।

यदि आप पूरी तरह से सभी चेतावनियों को अक्षम करना चाहते हैं , तो उपयोग करें -w(अनुशंसित नहीं)।


स्रोत: http://gcc.gnu.org/onbuildocs/gcc-4.3.2/gcc/Warning-Options.html



4

यदि आप लिनक्स कर्नेल को संकलित कर रहे हैं। उदाहरण के लिए, यदि आप "अप्रयुक्त-लेकिन-सेट-चर" चेतावनी को अक्षम करना चाहते हैं, तो त्रुटि के रूप में माना जाता है। आप एक बयान जोड़ सकते हैं:

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

अपने Makefile में


3

सभी उपयोगी सुझावों के लिए धन्यवाद। मैंने अंत में सुनिश्चित किया कि मेरे कोड में कोई चेतावनी नहीं है, लेकिन फिर से sqlite3 से यह चेतावनी मिल रही है:

Assuming signed overflow does not occur when assuming that (X - c) <= X is always true

जिसे मैंने निम्नलिखित CFLAG जोड़कर तय किया है:

-fno-strict-overflow

आपके कोड में समस्याग्रस्त निर्माणों को इंगित करने के लिए कई चेतावनी हैं। उन्हें अक्षम करने से आप संक्षिप्त परिप्रेक्ष्य में आगे बढ़ सकते हैं, लेकिन आपको कभी नहीं पता चलेगा कि ये मुद्दे लंबे समय तक आपको परेशान करेंगे।
बेंजामिन बैनियर

1
हाँ आप सही है। मेरा मतलब था कि मैंने यह सुनिश्चित कर लिया है कि मेरा कोड चेतावनी मुक्त है (मैंने सभी चेतावनियों को अक्षम नहीं किया है)
सौरभ वर्मा

3

-Wallऔर -Werrorसंकलक विकल्प इसका कारण बन सकते हैं, कृपया जांच लें कि क्या वे संकलक सेटिंग्स में उपयोग किए जाते हैं।


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