2011-11-08 14 views
5

पर libgmp को स्थिर रूप से लिंक करते समय त्रुटि जीएमपी दस्तावेज़ कहते हैं कि स्थैतिक लिंकिंग एक छोटे से प्रदर्शन में सुधार प्रदान कर सकता है।लिनक्स

मुझे अपने लिनक्स सिस्टम पर libgmp को स्थिर रूप से लिंक करने में समस्या हो रही है। मैंने उस मुद्दे को कम कर दिया है जो मुझे एक छोटे से टेस्ट केस में है।

gmptest.c

#include <gmp.h> 

int main(int argc, char** argv) { 
    mpz_t foo; 
    mpz_init(foo); 
    return 0; 
} 

Makefile:

all: clean gmptest static 

clean: 
    rm -f *.s 
    rm -f *.o 
    rm -f gmptest 
    rm -f static-gmptest 

gmptest: Makefile gmptest.c 
    gcc -std=c99 -O3 -lgmp gmptest.c -o gmptest 

static: clean Makefile gmptest.c 
    gcc -std=c99 -O3 -static /usr/lib/libgmp.a gmptest.c -o static-gmptest 

गैर स्थिर द्विआधारी संकलित किया गया है और किसी भी मुद्दे के बिना जुड़ा हुआ है, लेकिन 'स्थिर बनाने' का उत्पादन:

gcc -std=c99 -O3 -static /usr/lib/libgmp.a gmptest.c -o static-gmptest 
/tmp/ccWSFke9.o: In function `main': 
gmptest.c:(.text+0x8): undefined reference to `__gmpz_init' 
collect2: ld returned 1 exit status 
make: *** [static] Error 1 

पुस्तकालय मौजूद है:

[email protected]:~/Dropbox/static$ ls -lA /usr/lib/libgmp.a 
-rw-r--r-- 1 root root 1041666 2010-02-26 13:20 /usr/lib/libgmp.a 

मैंने स्थिर लिंकिंग के लिए -lgmp भी कोशिश की है, लेकिन त्रुटि वही है।

यह सब उबंटू 10.04 और 10.10 AMD64 पर है।

क्या कुछ मुझे स्पष्ट त्रुटि के रूप में बता सकते हैं?

धन्यवाद,

क्रिस।

+1

क्या आपने फिर से प्रयास करने की कोशिश की है ताकि लाइब्रेरी-आवश्यक * कमांड लाइन पर उपयोगकर्ता के पुस्तकालय के बाद * आवश्यक हो? – ephemient

उत्तर

9

gcc -std=c99 -O3 -static gmptest.c -lgmp -o static-gmptest 

प्रयास करें क्योंकि पुस्तकालयों हमेशा अच्छे क्रम में जोड़ा जाना चाहिए, और कार्यक्रम के बाद या उन्हें का उपयोग करके फ़ाइलें आपत्ति है।

+0

धन्यवाद, यह लिंक करने का आदेश था। – fadedbee

+0

यह अक्सर सी/सी ++ के लिए नए लोगों के लिए होता है। मुझे आश्चर्य है कि क्या वे भविष्य में कुछ प्रकार की चेतावनी जोड़ देंगे। यह निश्चित रूप से बहुत समय बचाएगा। – Jendas