2012-03-08 17 views
5

अनदेखा किया गया है मैं स्रोत से FFmpeg संकलित कर रहा हूं।

./configure --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-x11grab --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 
make 
make install 

ldd /usr/local/bin/ffmpeg मुझे इस

linux-gate.so.1 => (0xb7717000) 
libavdevice.so.53 => not found 
libavfilter.so.2 => not found 
libavformat.so.54 => not found 
libavcodec.so.54 => not found 
libpostproc.so.52 => not found 
libswresample.so.0 => not found 
libswscale.so.2 => not found 
libavutil.so.51 => not found 
libm.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libm.so.6 (0xb76e3000) 
libpthread.so.0 => /lib/i386-linux-gnu/tls/i686/nosegneg/libpthread.so.0 (0xb76ca000) 
libc.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6 (0xb7569000) 
/lib/ld-linux.so.2 (0xb7718000) 

स्थापना $LD_LIBRARY_PATH/usr/local/lib करने के लिए सही "नहीं मिला" त्रुटियां दिया, लेकिन कारणों का उल्लेख के लिए here, मैं $LD_LIBRARY_PATH स्थायी रूप से स्थापित करने के लिए नहीं करना चाहती।

मैंने उसी आदेश के साथ पुनः संकलित किया, इस बार $LD_RUN_PATH/usr/local/lib पर सेट किया गया।
make संकलन करते समय $LD_RUN_PATH को अनदेखा कर दिया गया प्रतीत होता है।

मेकफ़ाइल में व्यापक परिवर्तन किए बिना $LD_RUN_PATH का उपयोग करने का कोई तरीका है?

+0

आप हाथ (यानी द्वारा सफलतापूर्वक लिंक कर सकते हैं कमांड लाइन पर की सिफारिश के बिना, बनाने का उपयोग कर)? – Beta

+0

मुझे नहीं पता। मैं इसका परीक्षण कैसे कर सकता हूं? – htoip

+0

क्या आप हमें मेकफ़ाइल का हिस्सा दिखा सकते हैं जो 'ldd/usr/local/bin/ffmpeg' निष्पादित करता है? – Beta

उत्तर

5

क्या आपके पास साझा मोड में बाइनरी संकलित करने का कोई कारण है (जैसे उनके खिलाफ लिंक करने के लिए सॉफ़्टवेयर बनाना चाहते हैं)? यदि एक स्थिर 'ffmpeg' बाइनरी आपके लिए भी काम करेगी, तो इन निर्भरताओं को खत्म करने के लिए --enable- साझा विकल्प के बिना कॉन्फ़िगर करें।

अन्यथा, आप अपने सिस्टम को पता है जहां साझा पुस्तकालयों रहते हैं जाने के लिए, या तो वातावरण में LD_LIBRARY_PATH की स्थापना, LD_LIBRARY_PATH साथ लगाकर 'ffmpeg' के लिए सजा (जैसे, "LD_LIBRARY_PATH =/usr/स्थानीय/lib/usr द्वारा की आवश्यकता होगी/स्थानीय/बिन/ffmpeg "), या सही स्थान के साथ अपने सिस्टम के पुस्तकालय पथ अद्यतन करें।

एक और समाधान है जो आपके पोस्ट में लिंक किए गए पृष्ठ के बहुत नीचे है: "एलडीएफएलजीएस = '- एल/मेरा/अजीब/पथ/lib -Wl, -rpath/my/strange/path/lib ' "। FFmpeg के लिए, और अपनी स्थिति के लिए, इस अतिरिक्त पैरामीटर कॉन्फ़िगर समय में पारित:

--extra-ldflags="-L/usr/local/lib -Wl,-rpath /usr/local/lib" 

और जिसके परिणामस्वरूप 'ffmpeg' द्विआधारी जहां साझा पुस्तकालयों को खोजने के लिए पता चल जाएगा।

इस के लिए कई समाधान।

+0

मुझे नहीं पता कि मुझे साझा विकल्प की आवश्यकता है, लेकिन निर्देश क्या उपयोग करते हैं। '--extra-ldflags' पूरी तरह से काम किया। – htoip

2

किसी और के लिए जो इस पर ठोकर खा रहा है, कारण $LD_RUN_PATH काम नहीं कर रहा था this bug सोने के लिंकर के साथ हो सकता है।

(वैकल्पिक हल rpath उपयोग करने के लिए माइक के जवाब में वर्णित है)

2
  1. अधिकांश शायद LD_RUN_PATH नजरअंदाज कर दिया है क्योंकि पैकेज के कॉन्फ़िगर पहले से ही लिंकर की cmdline में कुछ -Wl, -rpath विकल्प दिया है (स्पष्ट रूप से मैं खुद को नहीं जानते। मैं वही व्यवहार देखता हूं लेकिन मैं 486 से mips32 तक संकलित कर रहा हूं)।

  2. इस तरह कॉन्फ़िगर चलाने की कोशिश: कॉन्फ़िगर LDFLAGS = "- एल/अपने/lib -Wl, -rpath-लिंक =/अपने/lib" CPPFLAGS = "- मैं/अपने/शामिल हैं" उपसर्ग =/TGT ...

    मैं -rpath के बजाय -rpath-लिंक का उपयोग करता है, तो अपने निर्देशिका/अलग है से/TGT

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