क्या यह निर्धारित करने का एक तरीका है कि निष्पादन योग्य का समर्थन करने के लिए क्या पैकेज या लाइब्रेरी लोड की जानी चाहिए?


11

एक निष्पादन योग्य है जिसे मैं एक कंप्यूटर पर स्थापित करना चाहता हूं जिसे मैं पुन: स्थापित नहीं कर सकता हूं जिसे पैकेज के रूप में नहीं बनाया गया था, और मैं उन पुस्तकालयों को डाउनलोड करना चाहता हूं जिन्हें उन्हें चलाने की आवश्यकता है।

नीचे इस lddपर चलने से आउटपुट का हिस्सा है

libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)

क्या कोई ऐसा उपकरण है जो इस जानकारी का उपयोग कर सकता है कि कौन से संकुल को डाउनलोड किया जाना चाहिए या बेहतर अभी तक केवल सूचीबद्ध पुस्तकालयों और उनकी निर्भरता निकालने के लिए, डिस्क उपयोग को कम करने के लिए? सिस्टम एक हेडलेस वीएम पर चल रहा है और कार्यक्रम वीएनसी के माध्यम से प्रदर्शित किया जाएगा।

हालांकि मुझे संदेह है कि एक पूर्ण विकसित ग्राफिक्स डेस्कटॉप अधिकांश पुस्तकालयों की आपूर्ति करेगा, जिन्हें मैं केवल आवश्यक पुस्तकालयों, उनकी निर्भरताओं और इसके समर्थन के लिए एक्स विंडोज पैकेज के केवल पर्याप्त डाउनलोड करना चाहता हूं।


1
क्या ओएस? पैकेज और उनके नाम के साथ-साथ पैकेज मैनेजर वितरण के बीच बदलते हैं (और यह मान लिया जाता है कि आप किसी तरह का लिनक्स चला रहे हैं)।
terdon

यह इस मामले में डेबियन और उबंटू है
vfclists 13

उस स्थिति में, मेरा जवाब आपके लिए काम करना चाहिए।
terdon

वास्तव में मैं बस इसे परखने वाला हूं, बेलेटली। मैं इसके बारे में भूल गया और बस एक ऐसा ही सवाल पूछा, जिसके कारण यह शीर्ष संबंधित प्रश्न के रूप में दिखा, LOL
vfclists

जवाबों:


14

आपने यह नहीं कहा है कि आप किस ओएस का उपयोग कर रहे हैं इसलिए मैं लिनक्स को संभालने जा रहा हूं और उदाहरण के रूप में डेबियन का उपयोग करूंगा। आपके प्रश्न का त्वरित उत्तर अब तक मुझे पता नहीं है। हालांकि यह एक उपयोगी समाधान हो सकता है:

ldd your_prog | awk '{print $1}' | sed 's/\..*//' | 
  while read n; do echo "----- $n ----"; apt-cache search ^$n; done

यह lddआउटपुट को पार्स करेगा और फिर apt-cacheउन संकुल के लिए रिपॉजिटरी की खोज करने के लिए (जिसे आपके OS के समतुल्य है) प्रतिस्थापित करें जिनके नाम और विवरण में लाइब्रेरी नाम का पहला भाग होता है ldd

यह उन सभी को नहीं ढूंढेगा और कुछ (जैसे libc) के लिए बहुत अधिक परिणाम देगा लेकिन यह मददगार हो सकता है।


@FaheemMitha ने बताया कि apt-fileयह एक बेहतर तरीका हो सकता है। उदाहरण के लिए:

ldd /bin/bash | awk '/=>/{print $(NF-1)}'  | 
 while read n; do apt-file search $n; done |
  awk '{print $1}' | sed 's/://' | sort | uniq

यह पैकेज के नामों की सूची लौटाएगा जो लिंक किए गए लाइब्रेरी प्रदान करते हैं।


1
apt-file searchतीर के दाईं ओर वास्तविक फ़ाइल पर अधिक प्रभावी हो सकता है।
फहीम मीठा

@FaheemMitha बहुत अच्छा बिंदु, धन्यवाद। उत्तर संपादित किया गया।
terdon

सिस्टम पर लाइब्रेरी के अस्तित्व के परीक्षण के लिए कमांड को कैसे समायोजित किया जा सकता है ताकि उन्हें डाउनलोड करने की आवश्यकता हो? मुझे लगता है कि हाल ही में मैंने जो सवाल पूछा था, वह उस रेखा के साथ अधिक है। मैं इसे फिर से खोलने के लिए कह रहा हूं।
vfclists 14

@vfclists वास्तव में इसके लायक नहीं है, बस apt-get installउन सभी और जो पहले से स्थापित हैं, उन्हें नजरअंदाज कर दिया जाएगा।
terdon

इसका कारण त्वरित डाउनलोड के लिए कोई शानदार पुस्तकालय नहीं होने के साथ एक वीएम बनाना है। पैकेज इंस्टॉल में बहुत सारी अनावश्यक चीजें होती हैं और मुझे केवल लाइब्रेरी फ़ाइलों और उनकी निर्भरता की आवश्यकता होती है जो निष्पादक द्वारा आवश्यक होती हैं। यह मुझे अपने बैश और लिनक्स कौशल को सुधारने का भी मौका देता है। कोई अजगर नहीं।
vfclists 15

3

@ टेर्डन का जवाब बहुत अच्छा है, लेकिन इसे करना और भी आसान है, dpkg-queryजिसके विपरीत डिबेट apt-fileसिस्टम पर डिफ़ॉल्ट रूप से इंस्टॉल किया गया है।

ldd /bin/bash | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | uniq

यह संकुल की सूची तैयार करता है।


1

आपका सबसे अच्छा शर्त एक पैकेज खोजना है जो वास्तव में आपके वितरण का समर्थन करता है। लेकिन अगर वह आपके काम आने वाला नहीं है तो मैं केवल एक ही तरीका जानता हूं।

जैसा आपके पास है, ldd चलाएँ, फिर उन निर्भरताओं को मैन्युअल रूप से स्थापित करें।

उदाहरण के लिए libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)

मेरे लिए इसका मतलब होगा कि स्थापित करना apt-get install libpango:i386और प्रार्थना करना कि डेबियन अस्थिर में संस्करण काफी अच्छा था।

आपको ldd, Google की प्रत्येक पंक्ति से गुजरने की आवश्यकता है, अपने उपलब्ध रिपॉजिटरी में देखें, और मूल रूप से भाग्यशाली हैं। फिर उन्हें एक-एक करके स्थापित करें। तक कार्यक्रम वास्तव में चलता है। हालांकि ldd केवल "सरल" कार्यक्रमों के लिए काम करेगा। प्रोग्राम्स जो प्लगइन्स को कॉल करते हैं या जो मनमाना कोड चलाते हैं, सभी एक साथ एक अलग मामला है। उन लोगों के लिए जिन्हें आपको कंसोल से चलना होगा, और क्रैश / त्रुटियों को ठीक करना होगा जैसा कि वे होते हैं।

उस ने कहा, एक द्विआधारी केवल निष्पादन योग्य बनाए रखने के लिए भयानक रूप से कठिन है। आप कुछ और का उपयोग करने पर विचार कर सकते हैं। यदि आपका डिस्ट्रो थोड़ा आगे है, या उस निष्पादन को बनाने वाले सिस्टम से थोड़ा पीछे है, तो आप इसे काम करने के लिए कभी नहीं प्राप्त कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.