2010-04-26 12 views
9

मुझे पता है कि यह एक करने के लिए इसी तरह की कई अन्य सवाल कर रहे हैं, लेकिन समाधान में से कोई भी मंजूर किया क्या मेरे लिएCUDA एसडीके में '' की कोशिश, ld पुस्तकालय नहीं मिल रहा है, ldconfig कहना है कि वह कर सकते हैं

मूल रूप से काम कर रहे हैं , एसडीके नमूना फ़ाइलें बनाने, मैं /usr/bin/ld: cannot find -lcuda जो होगा प्राप्त एक आसान पर्याप्त 'पुस्तकालय खोजने के लिए और ldconfig को फेंक', ldconfig पहले से ही कहते हैं, सिवाय इसके कि यह है ...

$ sudo ldconfig -v | grep cuda 
/usr/local/cuda/lib64: 
    libcudartemu.so.3 -> libcudartemu.so.3.0.14 
    libcudart.so.3 -> libcudart.so.3.0.14 
/usr/local/cuda/lib: 
    libcudartemu.so.3 -> libcudartemu.so.3.0.14 
    libcudart.so.3 -> libcudart.so.3.0.14 
    libcuda.so.1 -> libcuda.so.195.36.15 
    libcuda.so.1 -> libcuda.so.195.36.15 
    libicudata.so.42 -> libicudata.so.42.1 

और मैं जाँच की, वहाँ है एक सिम्लिंक libcuda.so -> libcuda.so.1 लेकिन मैं अभी भी उलझन में हूं क्यों libcuda.so -> ... डो स्नैप शो

मुझे कुछ वास्तव में स्पष्ट याद आना चाहिए। कोई विचार?

+3

गूगल के जरिये इस सवाल मिले। चूंकि अब मुझे 3 साल बाद एक ही समस्या है, मैंने सोचा कि मैं अपना समाधान नोट करूँगा: कम से कम CUDA 5.0 एसडीके नमूने और मेरे वर्तमान चालक (304.64) के लिए, इस समस्या को 'EXTRA_LDFLAGS =' बनाकर हल किया जा सकता है। -एल/​​usr/lib64/nvidia "' (32-बिट सिस्टम पर lib के लिए lib64 स्विच करें)। लिंकर/usr/lib (64) में देख रहा है लेकिन ड्राइवर ने usr/lib (64)/nvidia में चीजों को स्थापित किया है, लेकिन प्रदत्त मेकफ़ाइल 'EXTRA_LDFLAGS' का उपयोग करते हैं। – Sam

उत्तर

7

ldconfig केवल रनटाइम पुस्तकालयों के साथ सौदों, जबकि ld बिल्ड-टाइम पुस्तकालयों से संबंधित है। आपने सीयूडीए पुस्तकालयों को कैसे स्थापित किया है, इस पर निर्भर करते हुए, आपको बिल्डटाइम पर इस्तेमाल किए गए सिम्लिंक के लिए एक अतिरिक्त पैकेज स्थापित करने की आवश्यकता हो सकती है, या आपको यह बताए जाने के लिए कि 0 -विकल्प जीसीसी या एलडी को पास करने की आवश्यकता हो सकती है ताकि बिल्ड-टाइम सिम्लिंक कहां हो।

+0

आईएएनए अनुभवी कोडर है, इसलिए मैंने जो कहा है, उसमें से लगभग 70% मुझे समझ में आया: डी लेकिन क्या कहीं भी इन पथों को जोड़ने के लिए उन्हें कहीं भी जोड़ने के लिए कहीं भी है, $ PATH envvar के समान? मैंने पहले ही ld.so.conf.d के तहत एक conf फ़ाइल में निर्देशिका जोड़ने का प्रयास किया है, लेकिन यह कुछ भी तय नहीं है। – Bolster

+0

संख्या और '/ etc/ld.so.conf.d' को संशोधित करना केवल ld.so को प्रभावित करता है, जो केवल रनटाइम को प्रभावित करता है। यदि आप कुछ प्रकार के अर्ध-स्थायी समाधान चाहते हैं तो आपको अपनी परियोजना के लिए मेकफ़ाइल बनाने में देखना चाहिए। –

+2

यह वास्तव में CUDA एसडीके मेकफ़ाइल में एक कमी है। उन्हें डिफ़ॉल्ट रूप से वर्तमान-एल विकल्प को पास करना चाहिए। इसे रखने के लिए वर्तमान स्थान 'सी/सामान्य/सामान्य। एमके: 148' है। इस लाइन को 'LINKFLAGS + = -L/usr/lib/nvidia-current' पर बदलें। – kynan

1

संकलक/लिंकर कमांड लाइन पर -lcuda से पहले -l/usr/local/cuda/lib जोड़ने से पहले।

+0

एफवाईआई, grepping के कारण, libcuda वास्तव में/usr/local/cuda/lib में नहीं है, इसमें/usr/lib/nvidia-current/libcuda – Bolster

7

जोड़ें .bash_profile को

export PATH=/usr/local/cuda/bin:$PATH 
export LPATH=/usr/lib/nvidia-current:$LPATH 
export LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH 
export LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH 

और स्रोत .bash_profile

+3

एक अस्थायी फिक्स के रूप में आप एसडीके कोड नमूने बनाने के दौरान 'LIBRARY_PATH =/usr/lib/nvidia-current: $ LIBRARY_PATH' भी कर सकते हैं। – kynan

+0

मैंने इस जवाब को उखाड़ फेंक दिया, लेकिन जल्द ही मैंने पाया कि यह मेरे लिए काम नहीं करता है और मैं उपरोक्त पूर्ववत नहीं कर सकता। हालांकि, मैं CUDA के बजाय एक और पुस्तकालय का उपयोग कर रहा हूँ। – duleshi

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