2013-06-13 3 views
6

खोजते समय जब मैं nvcc 5.0 के साथ .cu फ़ाइल संकलित करता हूं, तो संकलक मुझे निम्न जानकारी देता है।असंगत libcudart.so को छोड़कर -lcudart

/usr/bin/ld: असंगत /usr/local/cuda-5.0/lib/libcudart.so लंघन जब के लिए -lcudart

यह या तो एक चेतावनी या एक त्रुटि लगता है खोज। मुझे नहीं पता कि मामला क्या है।

क्या कोई इस जानकारी के बारे में अधिक जानकारी प्राप्त कर रहा है?

+0

क्या आप 64-बिट कोड संकलित करने का प्रयास कर रहे हैं? यदि ऐसा है, तो आपको 64-बिट संस्करण के विरुद्ध लिंक करने की आवश्यकता है जो '/ usr/local/cuda-5.0/lib64/libcudart.so' में स्थित होना चाहिए। – BenC

उत्तर

10

यह चेतावनी अक्सर 32-बिट लाइब्रेरी के साथ 64-बिट कोड को जोड़ने का प्रयास करते समय होती है, यह प्रश्न देखें: Skipping Incompatible Libraries at compile

आप 2 पुस्तकालय फ़ाइलें भेद करने के लिए की जरूरत है:

  • $CUDA_HOME/lib/libcudart.so, cudart पुस्तकालय के 32-बिट संस्करण।
  • $CUDA_HOME/lib64/libcudart.so, cudart लाइब्रेरी का 64-बिट संस्करण।

मूल रूप से (आपके मामले में, $CUDA_HOME/usr/local/cuda-5.0 है), लिंकर पहले 32-बिट पुस्तकालय पाता है (-L विकल्पों क्रम में की खोज कर रहे हैं) और उस भी चेतावनी अगर यह उचित लग रहा समाप्त होता है पुस्तकालय।

आप शायद इतना है कि ld 32-बिट संस्करण से पहले अपने 64-बिट वास्तुकला के लिए उचित पुस्तकालय पा सकते हैं $CUDA_HOME/lib से पहले अपने LD_LIBRARY_PATH वातावरण चर को $CUDA_HOME/lib64 जोड़ने की जरूरत है।

+1

धन्यवाद। मेरा कामकाजी ओएस 64-बिट है, इसलिए मेरा पूरा कोड संकलित होगा और 64-बिट से लिंक होगा। यह अजीब लगता है कि 64-बिट CUDA5.0 में 32-बिट लाइब्रेरी शामिल हैं। – konjac

+1

64-बिट ओएस पर, आप 32-बिट अनुप्रयोग भी बना सकते हैं और चला सकते हैं, इसलिए इसके लिए आपको 32-बिट 'libcudart.so' की आवश्यकता होगी। – BenC

+1

मुझे ठीक वही समस्या प्रतीत होती है। मेरा 'LD_LIBRARY_PATH' 'lib64' से पहले 'lib64' है, इसलिए यह मेरे सिस्टम पर काम नहीं कर रहा है। कोई विचार? –

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