2012-05-08 25 views
11

यह मेरी पहली बार मेकफ़ाइल का उपयोग करके फ़ोरट्रान कोड को संकलित करने का प्रयास कर रहा है। ओएस उबंटू 12.04 एलटीएस 64 बिट है।"/ usr/bin/ld: लाइब्रेरी नहीं मिल सका"

gfortran -o przm3123.exe canopy.o chem.o cnfuns.o cropdate.o datemod.o debug.o debug_cn.o f2kcli.o floatcmp.o furrow.o general.o i_errchk.o infnan.o inivar.o ioluns.o iosubs.o lambertw.o m_readvars.o utils.o wind.o fcscnc.o przm3.o rsexec.o rsinp1.o rsinp2.o rsinp3.o rsmcar.o rsmisc.o rsprz1.o rsprz2.o rsprz3.o rsprzn.o rsutil.o rsvado.o -L ../libanne4.0/lib -lwdm -ladwdm -lutil 
/usr/bin/ld: cannot find -lwdm 
/usr/bin/ld: cannot find -ladwdm 
collect2: ld returned 1 exit status 
make: *** [przm3123.exe] Error 1 

makefile में प्रमुख तत्व है:

przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil 

क्या मैं इस त्रुटि को ठीक करने के लिए कुछ कर सकते हैं मैं निम्नलिखित त्रुटियाँ? क्या मुझे अन्य कंपाइलर्स आज़माएं?

+3

पहली बात मैं जाँच करेगा अगर आप वास्तव में 'libwdm.so' और' libadwdm.so' है। मुझे लगता है कि वे इस 'libanne4.0/lib' निर्देशिका में होना चाहिए। – birryree

+0

हां, 'libwdm.a' और' libadwdm.a' वहां हैं। –

+0

ओह, स्थैतिक पुस्तकालय। क्या आप इसे अपने मेकफ़ाइल में आजमा सकते हैं? 'przm2_LIBS = -L ../ libanne4.0/lib -Wl, -बैडेमिक-लूटिल -ब्लूएल, -स्टैटिक -एलडब्लूएमएम -एलडब्लूडीएमएम - मुझे लगता है कि 'उपयोग'' libutil.so' (एक साझा लाइब्रेरी) है क्योंकि यह नहीं हुआ इसके बारे में शिकायत नहीं करते हैं। – birryree

उत्तर

10

../libanne4.0/lib एक रिश्तेदार पथ है के रूप में, आप एक निरपेक्ष एक में बदलने का प्रयास हो सकता है।

इसके अलावा, आप चाहे लिंकर प्रक्रिया का उपयोग करने के लिए अधिकार है की जाँच करें और libs पढ़ सकते हैं।


अद्यतन: लिंकर को खोजने के एक पुस्तकालय विकल्प -l<name> का उपयोग कर libray के नाम lib<name>.[a|so] होगा और -L पैरामीटर पथ पर ले जाना चाहिए थे पुस्तकालय स्थित है निर्दिष्ट करने के लिए।

-L को -l विकल्प (ओं) को आगे बढ़ाने की आवश्यकता है।

एक -l और/या -L कई बार निर्दिष्ट कर सकते हैं।

+1

पूर्ण पथ प्रदान किया, लेकिन एक ही त्रुटि। मैंने 'ld adwdmlib.a' की कोशिश की और निम्न त्रुटियां प्राप्त की:' ld: चेतावनी: प्रवेश प्रतीक _start नहीं मिल सकता है; प्रारंभ पता सेट नहीं कर रहा है धन्यवाद –

+1

'adwdmlib.a' क्या है? – alk

+1

adwdmlib.a एक पुस्तकालय है जिसमें मुझे शामिल करने की आवश्यकता है। एल और एल नियम के आधार पर आप को संशोधित किया गया। क्या इसका मतलब है 'przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil' काम नहीं करता है क्योंकि उन libs का नाम सही नहीं है? –

1

"adwdmlib.a" नाम से कुछ गड़बड़ है। एक लिंकिंग ध्वज "-एल adwdm" संकलक को "libadwdm.a" नाम से lib फ़ाइल की अपेक्षा करने के लिए बताएगा, न कि "adwdmlib.a"। क्या यह सहायक या प्रासंगिक है? यदि आपका लाइब्रेरी नाम "adwdmlib.a" है, तो शायद यही कारण है कि आपका लिंकर इसे नहीं ढूंढ सकता।

+0

टिप्पणी के लिए धन्यवाद। मैंने उन libs का नाम बदलने की कोशिश की, लेकिन लिंकर अभी भी उन्हें नहीं मिला। –