2011-12-03 12 views
7

पर OpenCV2.3.1 संकलित करते समय अजीब लिंकर त्रुटि here वर्णित निर्देशों के बाद मैं उबंटू 11.10 पर ओपनसीवी संस्करण 2.3.1 संकलित करने का प्रयास कर रहा हूं। मुझे निम्नलिखित त्रुटि मिल रही है। क्या हो रहा है समझ में नहीं आता ... /usr/local/lib/libavcodec.a मौजूद है लेकिन लिंकर इसके खिलाफ लिंक नहीं कर सकता है, या कुछ और?उबंटू 11.10

त्रुटि:

[ 20%] Built target pch_Generate_opencv_highgui 
Linking CXX shared library ../../lib/libopencv_highgui.so 
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet' 
can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/libavcodec.a: could not read symbols: Bad value 
collect2: ld returned 1 exit status 
+0

आप -fPIC साथ संकलन के रूप में त्रुटि पता चलता है की कोशिश की है करने के लिए है Ubuntu के एक 64-बिट संस्करण चला रहे हैं? – RCE

+0

संकलित करें क्या? ओपनसीवी खुद ही? –

+0

@RCE मैं कंपाइलर/लिंकर में -एफपीआईसी ध्वज कैसे जोड़ूं? क्या मुझे मेकफ़ाइल संपादित करना चाहिए? –

उत्तर

6

समस्या यह है कि आप libavcodec.a साथ libopencv_highgui.so से जोड़ने के लिए प्रयास कर रहे हैं है। उत्तरार्द्ध -fPIC (जो काफी सामान्य है) के बिना संकलित कोड से बनाया गया है, और ऐसे कोड को x86_64 पर साझा पुस्तकालयों में जोड़ा नहीं जा सकता है।

आपके विकल्प हैं:

  • प्राप्त libavcodec.so और इसके खिलाफ लिंक करने की व्यवस्था, या
  • पूरी तरह से libavcodec या -lavcodec निकालें लिंक लाइन से।

सबसे पहले, आपको शायद libavcodec-dev पैकेज स्थापित करने की आवश्यकता है।

यदि आप दूसरा करते हैं, तो आपको अभी भी को libavcodec से रनटाइम पर उपलब्ध होने के लिए प्रतीकों की व्यवस्था करनी होगी। आप मुख्य निष्पादन योग्य को libavcodec (या तो संग्रह या साझा संस्करण) से जोड़कर प्राप्त कर सकते हैं।

+0

मैं x264 और ffmpeg दोनों के लिए --enable-pic विकल्प जोड़ता हूं। एक ही त्रुटि मिल गई। फिर libhighgui और libcv हटा दिया (उबंटू भंडार से स्थापित) और libavc-1394-22-dev भी स्थापित किया। संकलित ओपनसीवी फिर से और यह ठीक काम कर रहा है! धन्यवाद –

+0

आपने libhighgui और libcv को कैसे हटाया? क्या आप libavc-1394-22-dev के लिए एक लिंक भी भेज सकते हैं – oneiros

4

मेरी ले होगा कि, पहली बार चलाने sudo apt-get libavcodec निकालें, तब sudo के साथ फिर से स्थापित apt-get स्थापित libopencv-देव

मैं एक बार इसी तरह के मुद्दे था, और इसके बाद के संस्करण में यह

2
का समाधान

आप कॉन्फ़िगर और ./configure --enable-shared --enable-pic साथ ffmpeg निर्माण के रूप में यह कदम 7b में वर्णन किया गया और 8b

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