2012-06-04 9 views
8

मैं उबंटू 10.04 का उपयोग कर रहा हूं और कुछ कोड संकलित करने की कोशिश कर रहा हूं जो gfortran का उपयोग करता है। कुछ बिंदु पर Makefiles करता है:lgfortran नहीं मिला

-L. -lgfortran 

और मैं त्रुटि

/usr/bin/ld: cannot find -lgfortran 

मिलता है, हालांकि यह स्थापित किया गया है:

ldconfig -p | grep fortran 
    libgfortran.so.3 (libc6,x86-64) => /usr/lib/libgfortran.so.3 

मैं इसे कैसे ठीक कर सकते हैं?

पी.एस: Makefile:

## FLAGS 

CC:= gcc 
C++:= g++ 
CFLAGS:= -c -O -Dintel -g 
FC:= gfortran 
FFLAGS:= -c -O -cpp -g 
LD:= g++ 
LDFLAGS:= -O 


WETTER_CGAL_FLAGS:= -g 


#WETTER-Data 
WETTER_cgal: weather.cpp surface_alg.h $(WETTER_CGAL_OBJECTS) WATT_interface.h data.cpp 
    $(C++) $(WETTER_CGAL_FLAGS) -c weather.cpp -frounding-math 
    $(C++) -c data.cpp -frounding-math 
    $(LD) $(WETTER_CGAL_OBJECTS) weather.o data.o -o WETTER_cgal -L. -lgfortran -lgmp -lCGAL -frounding-math -fp-model 
+1

आप एक न्यूनतम Makefile कि त्रुटि पैदा करता है प्रदान करते हैं सका: समस्या यह का उपयोग कर हल किया गया था? यह जरूरी रूप से इसकी गलती होनी चाहिए, क्योंकि आपका खोल वातावरण ठीक लगता है। –

+0

किया गया, प्रश्नों को उस जानकारी के साथ अद्यतन किया गया है – flow

उत्तर

12

करता है कोई मौका अपने gfortran संस्करण अपने g++ के संस्करण से अलग है? या शायद यह एक अलग स्थान पर स्थापित है?

-lname विकल्प (इस मामले name में gfortran है) एक पुस्तकालय पुस्तकालय खोज पथ में libname.a बुलाया फ़ाइल के लिए खोज करने के लिए लिंकर निर्देश देता है। यदि पाया गया है और -[B]static विकल्प द्वारा कोई स्थैतिक लिंक लागू नहीं किया गया है तो लिंकर एक बार फिर libname.so के लिए खोज करेगा और इसके बजाय इसके लिंक (यदि मिलेगा)। libname.a नहीं मिला है libname.so की उपस्थिति के बावजूद एक त्रुटि दी जाएगी।

libgfortran.a आपके gfortran स्थापना में कहीं भी होना चाहिए। find के साथ इसके लिए खोजें और g++ पर -L/path/to/compiler/libs के साथ पथ प्रदान करें। यदि g++ आपके gfortran के समान संस्करण है, तो libgfortran.a का पथ पहले से ही लाइब्रेरी खोज पथ में मौजूद होगा (क्योंकि दोनों सी/सी ++ और फोरट्रान स्थिर पुस्तकालय एक ही स्थान पर रहते हैं)। यह तब मौजूद नहीं होगा जब दोनों कंपाइलर्स उनके संस्करण में भिन्न हों।

64-बिट RedHat आधारित प्रणाली libgfortran.a /usr/lib/gcc/x86_64-redhat-linux/<GCC version>/ में स्थित है, जबकि साझा libgfortran.so.* /usr/lib64 में स्थित हैं पर उदाहरण के लिए

/usr/lib/libgfortran.so.3 के साथ -lgfortran को प्रतिस्थापित करने का एक वैकल्पिक समाधान है।

-L. विकल्प से -lgfortran से अधिक है।

4

एटीएलएएस संकलित करते समय आज भी यही समस्या थी और libgfortran.so.3 से libgfortran.so पर प्रतीकात्मक लिंक का उपयोग करके इसे ठीक करने में सक्षम था।

gcc --version 

और

gfortan --version 

एक ही है:

+0

ठीक है, यह मेरे लिए काम किया, लेकिन यह क्यों काम किया? साथ ही, क्या 'ld.so.conf.d/'में लिंक बनाना संभव होगा? – Seanny123

3

बस सुनिश्चित करें कि आप बनाते हैं।

/usr/bin/ 

विभिन्न संस्करणों में शामिल हैं।

जैसे: gcc--version returns 4.7.3 और gfortran --version 4.8, एक साधारण हैक निम्नलिखित करने के लिए किया जा सकता है।

sudo cp /usr/bin/gcc-4.8 /usr/bin/gcc 

यह काम करना चाहिए।

+0

मेरे सिस्टम में यह/etc/alternatives/gcc पर इशारा कर रहा था, मैंने gcc – Jijo

2

मुझे एक ही समस्या थी और निम्न आदेश का प्रयास किया।

sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so

+0

के उचित संस्करण का चयन करने के लिए 'विकल्प --config gcc' कमांड का उपयोग किया था और क्या यह समस्या हल हो गई थी या आपने इसे कब किया था? –

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