2012-06-28 19 views
33

मैं एक देब पैकेज संकलन कर रहा हूँ और जब मैं dpkg-buildpackage चलाने मैं पाया:dpkg-shlibdeps: त्रुटि: कोई निर्भरता जानकारी के लिए

dpkg-shlibdeps: error: no dependency information found for /usr/local/lib/libopencv_highgui.so.2.3 

    ... 
    make: *** [binary-arch] Error 2 

यह इसलिए होता है क्योंकि मैं निर्भरता मैन्युअल स्थापित। मुझे पता है कि यदि मैं निर्भरता स्थापित करता हूं (या चेकइंस्टॉल का उपयोग करता हूं) तो समस्या ठीक हो जाएगी, और मैं वैसे भी पैकेज जेनरेट करना चाहता हूं क्योंकि मुझे निर्भरता जांच पर रूचि नहीं है। मुझे पता है कि मैं डीपीकेजी-श्लिबडेप्स को --ignore-missing-info विकल्प दे सकता हूं जो असफलता की जानकारी नहीं मिल पाती है, तो असफल होने से बचाता है। लेकिन मैं के बाद से मैं dpkg-buildpackage उपयोग कर रहा हूँ और dpkg-buildpackage कॉल dpkg-shlibdeps कैसे dpkg-shlibdeps के लिए इस विकल्प को पारित करने नहीं पता ...

मैं पहले से ही की कोशिश की है:

sudo dpkg-buildpackage -rfakeroot -d -B 

और इसके साथ:

export DEB_DH_MAKESHLIBS_ARG=--ignore-missing-info 

रूट के रूप में।

कोई विचार?

उत्तर

-1

अंत में मैं यह जानवर तरह से किया था:

मैं स्क्रिप्ट/usr/bin/dpkg-shlibdeps संपादित, यह बदल रही:

my $ignore_missing_info = 0; 

को
my $ignore_missing_info = 1; 
+10

इस एक असाधारण खतरनाक विचार हो रहा है। यदि आप बाइनरी को प्रतिस्थापित करना चाहते हैं, तो आपको कम से कम विकल्पों को/usr/local/ –

3

dpkg- बिल्डपैकेज उपयोग डेबियन/नियमों को संसाधित करने के लिए करते हैं। इस प्रक्रिया में, dpkg-buildpackage यह dpkg-shlibdeps को कॉल कर सकता है।

इस प्रकार, पैकेज निर्माण प्रक्रिया के एक हिस्से को संशोधित करने का उचित तरीका डेबियन/नियमों को संपादित करना है। वास्तविक डेबियन/नियमों को देखे बिना आपको और संकेत देना मुश्किल है।

15

आप यह सिर्फ यह है कि झंडा उपेक्षा से Debian/नियम लाइन बदलना चाहते हैं:

dh_shlibdeps 

रहे हैं:

dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info 
+3

में डालने का प्रयास करना चाहिए, यदि डेबियन/नियम फ़ाइल में उस पंक्ति नहीं है? – knocte

+0

कुछ पंक्ति उस संदेश को ट्रिगर करनी चाहिए, जिसका अर्थ है कि कुछ नियम होना चाहिए जो dpkg-shlibdeps को कॉल कर रहा हो। अगर यह dh_shlibdeps wrapper स्क्रिप्ट नहीं है, तो यह क्या है? –

+0

@knocte लिंक अब मान्य नहीं है, क्या आप इसे अपडेट कर सकते हैं? –

42

उपयोग:

override_dh_shlibdeps: 
    dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info 

अपने नियम है, तो फ़ाइल में dh_shlibdeps कॉल नहीं है। आमतौर पर यह मामला है यदि आपके पास

%: 
    dh [email protected] 

केवल इसमें नियम के रूप में है।

2

आपने अभी अपने निर्यात की गलत वर्तनी की है। यह इस तरह से होना चाहिए:

export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info 
+0

यह मेरे लिए काम नहीं किया – dequis

+0

यह मेरे लिए काम करता है (उबंटू 14.04)! धन्यवाद! –

4

इसके बजाय केवल त्रुटि की अनदेखी करने का, आप भी त्रुटि के स्रोत है, जो आमतौर पर या तो गुम या जिसमें पैकेज में एक गलत package.shlibs या package.symbols फ़ाइल है ठीक करने के लिए चाहते हो सकता है साझा लाइब्रेरी त्रुटि ट्रिगर।

[1] दस्तावेज़ dpkg-shlibdepspackage.shlibs resp का उपयोग करता है।package.symbols, फ़ाइलें, [2] package.shlibs और package.symbols फ़ाइलों का प्रारूप दस्तावेज करता है।

+0

यदि आप जिस पैकेज को बना रहे हैं, उसमें निजी साझा लाइब्रेरी प्रदान की जाती है, तो बेहतर तरीका 'dpkg-shlibdeps' के' -irectirectory 'विकल्प का उपयोग करना है - https://manpages.debian.org/testing/dpkg-dev/ देखें dpkg-shlibdeps.1.en.html –

7

फिर भी एक और तरीका है, लिपियों निर्माण को संशोधित करने, सिर्फ एक फ़ाइल बनाने के बिना।

आप नीचे दिए गए प्रारूप के साथ debian/shlibs.local बनाकर local shlib overrides निर्दिष्ट कर सकते हैं: library-name soname-version dependencies

उदाहरण के लिए, निम्नलिखित (छंटनी) ldd /path/to/binary उत्पादन को देखते हुए

libevent-2.0.so.5 => /usr/lib/libevent-2.0.so.5 (0x00007fc9e47aa000) 
libgcrypt.so.20 => /usr/lib/libgcrypt.so.20 (0x00007fc9e4161000) 
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fc9e3b1a000) 

debian/shlibs.local की सामग्री को होगा:

libevent-2.0 5 libevent-2.0 
libgcrypt 20 libgcrypt 
libpthread 0 libpthread 

"निर्भरता" सूची (तीसरा कॉलम) की आवश्यकता नहीं है 100% सटीक होने के लिए - मैं बस लाइब्रेरी नाम का उपयोग फिर से करता हूं।

बेशक यह एक डेन डेबियन सिस्टम में आवश्यक नहीं है जिसमें इस सामग्री को /var/lib/dpkg/info में परिभाषित किया गया है (जिसे इन ओवरराइड के लिए प्रेरणा के रूप में उपयोग किया जा सकता है)। मेरा एक डेनियन प्रणाली नहीं है।

0

आप इस का उपयोग कर सकते हैं:

dh_makeshlibs -a -n 

बिल्कुल के बाद dh_install

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