पर फोरट्रान में LAPACK को लिंक करना मुझे लगता है कि यह एक मानक नोब समस्या है, लेकिन पूरे दिन वेब पर खोज करने के बाद, मैंने आपको बग का फैसला किया। मैं मैक ओएस 10.9 पर हूं और मैं एक फोरट्रान प्रोग्राम से एक लैपैक ईजेनवेल्यू रूटीन कॉल करना चाहता हूं। मुझे कल फोर्ट्रान से पेश होने का आनंद मिला, इसलिए कृपया किसी भी मूर्ख गलतियों से क्षमा करें।मैक ओएस एक्स
यह कम से कम उदाहरण मैं चलाने के लिए प्राप्त करने के लिए चाहते हैं:
program eigtest
complex A(3,3)
real eigs(3)
A(1,1) = cmplx(1,0)
A(1,2) = cmplx(0,2)
A(1,3) = cmplx(3,0)
A(2,1) = cmplx(0,-2)
A(2,2) = cmplx(5,0)
A(2,3) = cmplx(1,-1)
A(3,1) = cmplx(3,0)
A(3,2) = cmplx(1,1)
A(3,3) = cmplx(7,0)
call heevd(A, eigs)
write(*,*) eigs
end
मुझे पता चला कि ओएस एक्स पर, LAPACK ढांचे में तेजी लाने का हिस्सा है, इसलिए मैं जैसी चीजों की कोशिश की:
gfortran -o eigtest -framework accelerate eigtest.f95
लेकिन लिंकर की शिकायत:
Undefined symbols for architecture x86_64:
"_heevd_", referenced from:
_MAIN__ in ccleuVFO.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
लापता विधि LAPACK से एक है। हेवेड एक हेर्मेटियन मैट्रिक्स के eigenvalues की गणना करता है। मैं _do_ प्रश्न में संकेत के रूप में gfortran का उपयोग करें। मुझे LAPACK को कॉल किए बिना फोरट्रान कार्यक्रमों को संकलित करने में कोई समस्या नहीं है। चूंकि ओएस एक्स 64 बिट के माध्यम से और उसके माध्यम से है, मुझे नहीं लगता कि समस्या यह है कि कोई 64 बिट संस्करण उपलब्ध नहीं है। – Jonas
हां, दस्तावेज़ों ने स्पष्ट किया। मुझे लगता है कि अगर LAPACK को उस विधि को जोड़ने की आवश्यकता है, तो आपका कार्य उस लाइब्रेरी को ढूंढना है जहां यह रहता है और इसे अपने लिंक पथ में जोड़ना है। – duffymo