का उपयोग करते समय हम न्यूलिब के तहत सिग्विन पर sigemptyset
का उपयोग करते समय संकलक त्रुटियों को पकड़ रहे हैं। त्रुटि सी ++ कंपाइलर के साथ होती है, लेकिन केवल -std=XXX
का उपयोग किया जाता है। एक मानक विकल्प के बिना, परीक्षण कार्यक्रम संकलित और निष्पादित के रूप में निष्पादित करता है।त्रुटि "sigemptyset को इस दायरे में घोषित नहीं किया गया था" सी +11 और न्यूलिब
परीक्षण कार्यक्रम नीचे है, और ब्याज के सिग्विन शीर्षलेख निम्नानुसार है। मुझे सिग्विन हेडर में कुछ भी संदिग्ध दिखाई नहीं देता है।
मैंने #define _GNU_SOURCE
और #define _XOPEN_SOURCE 700
जैसे चाल की कोशिश की है। मैंने वैश्विक और std
नामस्थानों जैसे ट्रिक्स की भी कोशिश की है। संबंधित, What does -D_XOPEN_SOURCE do/mean? और Namespace issues in c++11? देखें।
संकलन विफलता का कारण क्या है और मैं इसे कैसे ठीक कर सकता हूं?
$ cat ~/test.cxx
#include <signal.h>
int main(int argc, char* argv[])
{
struct sigaction new_handler;
return sigemptyset(&new_handler.sa_mask);
}
एक -std=XXX
के बिना, यह परिणाम:
$ g++ -c test.cxx
$
एक -std=XXX
के साथ, यह परिणाम:
$ g++ -std=c++03 -c test.cxx
test.cxx: In function int main(int, char**):
test.cxx:6:44: error: sigemptyset was not declared in this scope
return sigemptyset(&new_handler.sa_mask);
और जब ग्लोबल नेम स्पेस में sigemptyset
उपयोग करने की कोशिश :
$ g++ -std=c++03 -c test.cxx
test.cxx: In function ‘int main(int, char**)’:
test.cxx:6:12: error: ‘::sigemptyset’ has not been declared
return ::sigemptyset(&new_handler.sa_mask);
^
Things get worse when using -std=gnu++03
and friends।
मेरे * अनुमान *? जब आप जीएनयू एक्सटेंशन के बिना सादे सी ++ मानक का उपयोग करते हैं, तो आपको '' सहित पहले '_XOPEN_SOURCE' को परिभाषित करने की आवश्यकता होती है। –
इसके अलावा, आपको सिग्विन सिग्नल हेडर फ़ाइल के लिए '' में देखना चाहिए। –
धन्यवाद @ जोचिम। जब के लिए grepping 'sigemptyset' दो हिट देखते हैं: (1)'/usr/शामिल/bash/sig.h' और (2) '/ usr/शामिल/sys/signal.h'। – jww