2013-01-11 35 views
41

मैं जब make चल निम्नलिखित त्रुटि मिलती है, और मैं पता नहीं क्या इसका मतलब है या इसके बारे में क्या करना है। क्या कोई मुझे रोशन कर सकता है या मुझे सही दिशा में इंगित कर सकता है?हंक # 1 1 पर विफल। इसका क्या मतलब है?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch 
patching file Makefile.am 
Hunk #1 FAILED at 1. 
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej 
make: *** [dvdnav] Error 1 

मैं win32 (linux का उपयोग कर) के लिए वीएलसी संकलित करने की कोशिश कर रहा हूं।

उत्तर

43

यह patch द्वारा उत्पन्न कोई त्रुटि है। यदि आप .patch फ़ाइल खोलेंगे, तो आप देखेंगे कि यह खंडों के समूह में व्यवस्थित है, तथाकथित "शिकारी"। प्रत्येक हंक पुराने और नए संस्करण में कोड के समान टुकड़ों (लाइन संख्याओं) की पहचान करता है, कोड के उन टुकड़ों के बीच अंतर, और उनके बीच समानताएं ("संदर्भ")।

एक हंक असफल हो एक टुकड़ा की समानता क्या मूल फ़ाइल में मेल नहीं खातीं हो सकता है। जब आप यह त्रुटि देखते हैं, तो यह लगभग हमेशा होता है क्योंकि आप उस कोड के गलत संस्करण के लिए पैच का उपयोग कर रहे हैं जिसे आप पैचिंग कर रहे हैं। इसके आसपास काम करने के कुछ तरीके हैं:

  • libdvdnav का एक अद्यतन संस्करण प्राप्त करें जिसमें पहले से ही पैच (सर्वोत्तम विकल्प) शामिल है।
  • libdvdnav के संस्करण आप पैच रहे हैं के लिए एक .patch फ़ाइल प्राप्त करें।
  • मैन्युअल रूप से पैच करें। पैच में प्रत्येक हंक के लिए, संबंधित फ़ाइल और लाइनों को libdvdnav में ढूंढने का प्रयास करें, और पैच में निर्देशों के अनुसार उन्हें सही करें।
  • जो कुछ संस्करण .patch फ़ाइल के लिए गया था (शायद एक बुरा विचार) के करीब है कि libdvdnav के संस्करण है।
+0

धन्यवाद। क्योंकि मैं libs प्राप्त करने के लिए संकलन और एक बड़ी लिपि का उपयोग कर रहा हूं, मुझे लगता है कि मैं पैच फ़ाइल को संपादित करना चाहता हूं। क्या आप मुझे '@@' प्रतीकों के साथ लाइन का अर्थ बता सकते हैं? – JellicleCat

+1

आपका पैच [एकीकृत प्रारूप] में है (http://en.wikipedia.org/wiki/Diff#Unified_format)। आप दूसरे '@@' के बाद भाग को अनदेखा कर सकते हैं। '@@' के बीच, दो शब्द हैं:' -l, s' शब्द ऑफ़सेट इंगित करता है ('l' एक पंक्ति संख्या है) और आकार (' s' कई पंक्तियों में है) में संकेत है मूल फ़ाइल, जबकि '+ l, s' पैचिंग के बाद फ़ाइल में ऑफ़सेट और आकार इंगित करता है। जब कई शिकारी होते हैं, तो हाथ से '+ एल, एस' भाग निर्धारित करना काफी काम हो सकता है। –

+0

शब्द "हंक" और मैन्युअल रूप से पैच करने की सलाह देने के लिए धन्यवाद। – datv

-1

मुझे "शिकारी विफल" संदेश मिला जब मैं संबंधित गिट प्रोजेक्ट की शीर्ष निर्देशिका में पैच लागू नहीं कर रहा था। मैं एक उपनिर्देशिका में पैच (जहां मैंने इसे बनाया) लागू कर रहा था।

ऐसा लगता है धब्बे के लिए एक Git परियोजना के भीतर उप निर्देशिकाओं से बनाया जा सकता है, लेकिन लागू नहीं किया।

+1

यह सच नहीं है। हालांकि आपको पैच का उपयोग करते समय पथ के कितने प्रमुख हिस्सों को अनदेखा किया जाना चाहिए, यह बताने के लिए '-p' तर्क प्रदान करने की आवश्यकता है। 'पैच' को भंडार से अवगत नहीं है। 'गिट एम' है। – JonnyJD

3

डीबगिंग टिप्स

  1. पैच फ़ाइल और परीक्षण के अंत तक CRLF जोड़े अगर यह काम करता है
  2. की तरह में --ignore-सफ़ेद आदेश का प्रयास करें: [email protected]:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch देख tutorial by markus
+0

--ignore-Whitespace ने मेरा दिन बचाया। धन्यवाद ! – Strudle

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

  • कोई संबंधित समस्या नहीं^_^