2012-01-16 14 views
9

द्वारा लोड नहीं किए गए कॉन्स्टेंट्स मैंने पॉज़िक्स टाइमर का अध्ययन करना शुरू किया, इसलिए मैंने कुछ अभ्यास भी करना शुरू किया, लेकिन मुझे तुरंत कंपाइलर के साथ कुछ समस्याएं थीं। इस कोड को संकलित करते समय, मुझे CLOCK_MONOTONIC जैसे मैक्रोज़ के बारे में कुछ अजीब संदेश मिलते हैं। उनको विभिन्न पुस्तकालयों में परिभाषित किया गया है जैसे कि समय.h आदि। लेकिन कंपाइलर मुझे त्रुटियों देता है जैसे कि उन्हें परिभाषित नहीं किया गया है।कंपाइलर

यह क्योंकि मैं एक फेडोरा 16 उपयोग कर रहा हूँ अजीब है, और अपने दोस्तों के साथ Ubuntu के कुछ मैं कम से कम संकलक त्रुटियों मिलती है: -O

मैं gcc -O0 -g3 -Wall -c -fmessage-length=0 -std=c99 -lrt

यहाँ त्रुटियों मैं के साथ संकलन कर रहा हूँ:

  • struct sigevent sigeventStruct देता है:

    storage size of ‘sigeventStruct’ isn’t known 
    unused variable ‘sigeventStruct’ [-Wunused-variable] 
    Type 'sigevent' could not be resolved 
    unknown type name ‘sigevent’ 
    
  • sigeventStruct.sigev_notify = SIGEV_SIGNAL देता है:

    ‘SIGEV_SIGNAL’ undeclared (first use in this function) 
    request for member ‘sigev_notify’ in something not a structure or union 
    Field 'sigev_notify' could not be resolved 
    
  • if(timer_create(CLOCK_MONOTONIC, sigeventStruct, numero1) == -1) देता है:

    #include <stdio.h> 
    #include <fcntl.h> 
    #include <time.h> 
    #include <stdlib.h> 
    #include <errno.h> 
    #include <unistd.h> 
    #include <signal.h> 
    
    int main() 
    { 
         timer_t numero1; 
         struct sigevent sigeventStruct; 
         sigeventStruct.sigev_notify = SIGEV_SIGNAL; 
         if(timer_create(CLOCK_MONOTONIC, sigeventStruct, numero1) == -1) 
         { 
           printf("Errore: %s\n", strerror(errno)); 
         } 
         return 0; 
    } 
    
    :

    implicit declaration of function ‘timer_create’ [-Wimplicit-function- declaration] 
    ‘CLOCK_MONOTONIC’ undeclared (first use in this function) 
    Symbol 'CLOCK_MONOTONIC' could not be resolved 
    

यहाँ कोड है

+1

पर एक वर्कअराउंड के साथ एक सीडीटी-इंडेक्सर बग प्वाइंट फॉर्म में त्रुटियों के बजाय बस एक सुझाव है, बस उन्हें ठीक उसी तरह कॉपी करें क्योंकि वे प्रश्न में '

' ब्लॉक के अंदर हैं। –
                        
                            
                                
                            
                        
                    

+0

ठीक है अगली बार मैं आपके सुझाव –

उत्तर

13

सबसे पहले के बजाय &sigeventStruct, आप -std=gnu99 बजाय -std=c99 अगर साथ अपने कोड संकलन कर सकते हैं आप पहचानकर्ता SIGEV_SIGNAL, sigeventStruct, और CLOCK_MONOTONIC availa चाहते हैं ble।

बताया गया है जब _POSIX_C_SOURCE एक मूल्य के> = 199309L, जो -std=gnu99 के साथ मामला है पर सेट किया जाता द्वारा इन @adwoodland पहचानकर्ता घोषित कर रहे हैं। आप -D_POSIX_C_SOURCE=199309L -std=c99 का भी उपयोग कर सकते हैं या स्रोत कोड में मैक्रो परिभाषित कर सकते हैं।

दूसरे, timer_create प्रोटोटाइप देखते हैं, आप दूसरे और कार्य करने के लिए तीसरा तर्क के रूप में संकेत पारित करने के लिए है:

timer_create(CLOCK_MONOTONIC, &sigeventStruct, &numero1) 
          ^   ^

इसके अलावा, आप के लिए strerror समारोह घोषणा मानक हेडर string.h शामिल करने के लिए की है।

+0

पर विचार रखूंगा, 'टाइमर_टी' पर भी एक पॉइंटर होने पर अच्छा पकड़। मुझे याद आया क्योंकि '-Wall -Wextra' ने इसके बारे में भी चेतावनी नहीं दी थी! – Flexo

+0

मैं थोड़ा उलझन में हूं यदि मैं -std = gnu99 के साथ संकलित करता हूं तो मुझे कोड सूची में लिखे जाने के लिए #define _POSIX_C_SOURCE 199309L की आवश्यकता है? -std = c99 का उपयोग करते समय -D_POSIX_C_SOURCE = 199309L -std = c99 या -std = c99 और #define _POSIX_C_SOURCE 199309L का उपयोग कर एक ही चीज़ है? –

+0

@ कैटरपिलर यदि आप '-std = gnu99' का उपयोग करते हैं, तो आपके पास कुछ भी नहीं है,' _POSIX_C_SOURCE' स्वचालित रूप से परिभाषित किया जाएगा और मान> '199309L' होगा। '-std = c99' के साथ, '-D' या' # परिभाषित' समाधान का उपयोग समकक्ष है। '# परिभाषित' का उपयोग करते समय बस 'time.h'' और 'signal.h' – ouah

6

आप -std=c99 उपयोग कर रहे हैं आप आप अभी भी POSIX के हाल के संस्करणों का उपयोग कर रहे जीसीसी बताने की आवश्यकता:

#define _POSIX_C_SOURCE 199309L 

से पहले किसी भी #include, या यहाँ तक -D कमांड लाइन पर के साथ।

अन्य त्रुटियों:

  • #include <string.h>
  • गुम आप यानी timer_create के लिए एक सूचक की जरूरत है, बस sigeventStruct
4

अन्य उत्तरों _POSIX_C_SOURCE को सक्षम मैक्रो के रूप में सुझाव देते हैं। यह निश्चित रूप से काम करता है, लेकिन यह एकल यूनिक्स विशिष्टता (एसयूएस) में मौजूद सभी चीजों को जरूरी नहीं है। इसके लिए, आपको _XOPEN_SOURCE सेट करना चाहिए, जो स्वचालित रूप से _POSIX_C_SOURCE सेट करता है।

/* 
** Include this file before including system headers. By default, with 
** C99 support from the compiler, it requests POSIX 2001 support. With 
** C89 support only, it requests POSIX 1997 support. Override the 
** default behaviour by setting either _XOPEN_SOURCE or _POSIX_C_SOURCE. 
*/ 

/* _XOPEN_SOURCE 700 is loosely equivalent to _POSIX_C_SOURCE 200809L */ 
/* _XOPEN_SOURCE 600 is loosely equivalent to _POSIX_C_SOURCE 200112L */ 
/* _XOPEN_SOURCE 500 is loosely equivalent to _POSIX_C_SOURCE 199506L */ 

#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE) 
#if __STDC_VERSION__ >= 199901L 
#define _XOPEN_SOURCE 600 /* SUS v3, POSIX 1003.1 2004 (POSIX 2001 + Corrigenda) */ 
#else 
#define _XOPEN_SOURCE 500 /* SUS v2, POSIX 1003.1 1997 */ 
#endif /* __STDC_VERSION__ */ 
#endif /* !_XOPEN_SOURCE && !_POSIX_C_SOURCE */ 

यह सिस्टम मैं जो के साथ काम के लिए देखते है नहीं है सभी को पहचान 700 मूल्य: मैं एक शीर्ष लेख मैं "posixver.h" फोन जो शामिल है। यदि आप अपेक्षाकृत आधुनिक लिनक्स पर काम कर रहे हैं, तो मेरा मानना ​​है कि आप 700 का उपयोग कर सकते हैं। यह एक शीर्षलेख में है ताकि जब मैं नियमों को बदलना चाहता हूं तो मुझे केवल एक फ़ाइल बदलनी होगी।

+0

का उपयोग कर रहा हूं, धन्यवाद, मैं इस लाइब्रेरी को और उद्देश्यों के लिए रखता हूं –

1

मैं (किसी भी POSIX संस्करणों specifing के बिना) के साथ -std = gnu99 समस्याओं का एक बहुत हल लेकिन मैं अभी भी मैं इस बारे में शिकायत कर लोगों के साथ कुछ ग्रहण bugreports पाया इंटरनेट पर सर्च कर रहे हैं

CLOCK_MONOTONIC could not be resolved

हो रहा है।

कैटरपिलर के रूप में बताया इस ग्रहण बग, और अधिक स्पष्ट है: क्योंकि

gcc -Wall -w -o Blala timer.c -std=gnu99 -lrt

के साथ संकलित

+1

हां यह ग्रहण की सीडीटी प्लगइन –

2

CLOCK_MONOTONIC परिभाषित नहीं किया जा रहा समस्या की चर्चा करते हुए बेहतर जाँच करने के लिए अगर एक ग्रहण बग है है eclipse bugs, comment 12

+0

की एक बग है, आपको जोड़ना चाहिए कि लिंक मरने के मामले में क्या काम है – OMGtechy

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