2009-12-30 9 views
5

निम्न प्रोग्राम gcc में संकलित नहीं कर सकता है। लेकिन यह .c एक्सटेंशन के साथ जी ++ और एमएससी ++ के साथ ठीक है।एक gcc sqrt फ़ंक्शन बग?

#include <math.h> 
#include <stdio.h> 

int main() 
{ 
    double t = 10; 
    double t2 = 200; 

    printf("%lf\n", sqrt(t*t2)); 

    return 0; 
} 

मेरा सिस्टम CentOS, संस्करण जानकारी है।

> gcc --version 
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46) 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

त्रुटि जानकारी:

> gcc test.c 
/tmp/ccyY3Hiw.o: In function `main': 
test.c:(.text+0x55): undefined reference to `sqrt' 
collect2: ld returned 1 exit status 

यह एक बग है?

कोई भी मेरे लिए परीक्षण कर सकता है?

+0

यह भी देखें http://stackoverflow.com/questions/1033898 – ephemient

उत्तर

19

क्या आपने गणित पुस्तकालय को जोड़ा है?

gcc -lm test.c -o test 
+0

धन्यवाद ... मैं इस कंपाइलर के लिए नया हूं .. लेकिन g ++ काम करता है। । –

+6

क्योंकि 'जी ++' 'में -lstdC++' जो '-lm' में खींचती है खींचती है। – ephemient

+2

आप 'जी के साथ 'कच्चे' सी कोड संकलन नहीं करना चाहती ++'। C और C++ अलग-अलग भाषाओं में हैं। –

2

प्रयास करें gcc -lm test.c -o test

जीसीसी के लिए, आप में गणित पुस्तकालय लिंक करने के लिए, अपने जीसीसी कॉल करने के लिए -lm जोड़कर बताने की आवश्यकता।

2

हर कोई यह कह कर दिया गया है के साथ गणित पुस्तकालय जोड़े, लेकिन मैं भी इसे पसंद करेंगे। आपको गणित पुस्तकालय से लिंक करने के लिए जीसीसी को "बताना" होगा। जब आप संकलित करते हैं, gcc test.c कहने के बजाय, आपको gcc -lm test.c कहना होगा। मेरी इच्छा है कि मैं सिर्फ #include math.h कर सकता हूं और कुछ भी नहीं करना है।

2

बात है, gcc -lm test.c -o test काम नहीं करेगा क्योंकि जीसीसी एक संकलक और नहीं एक लिंकर विकल्प के रूप में -lm व्यवहार करेगा। आपको इसके बजाय कमांड के अंत में -lm डालना होगा, यानी gcc -o test test.c -lm

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