PKG_CONFIG_PATH पर्यावरण चर


74

यदि आप एक गैर-मानक उपसर्ग में सॉफ़्टवेयर स्थापित करते हैं, तो PKG_CONFIG_PATH पर्यावरण चर को समायोजित करने पर विचार करें। इसका क्या मतलब है ?


1
मैं इसे लगभग उसी तरह से पूछूंगा जैसे आप PKG_CONFIG_PATH पर्यावरण चर के उचित उपयोग के उदाहरणों के लिए पूछ सकते हैं जैसे "यह क्या है और मैं इसका उपयोग कैसे करता हूं?" ऐसा लगता है कि आपके द्वारा दिए गए उत्तर आपको यह बताने की कोशिश कर रहे हैं। जब यह निर्भरताएँ खोजने में विफल रहता है, तो मैं इस शो को बहुत अधिक खोज रहा हूँ ।/configure।
डगलस जी। एलन

जवाबों:


68

PKG_CONFIG_PATHएक पर्यावरण चर है जो अतिरिक्त पथ निर्दिष्ट करता है जिसमें pkg-configइसकी .pc फाइलें खोजी जाएंगी।

इस चर का उपयोग pkg-config के डिफ़ॉल्ट खोज पथ को बढ़ाने के लिए किया जाता है। एक विशिष्ट यूनिक्स प्रणाली पर, यह निर्देशिकाओं में खोज करेगा /usr/lib/pkgconfigऔर /usr/share/pkgconfig। यह आमतौर पर सिस्टम स्थापित मॉड्यूल को कवर करेगा। हालाँकि, कुछ स्थानीय मॉड्यूल एक अलग उपसर्ग में स्थापित किए जा सकते हैं जैसे कि /usr/local। उस स्थिति में, खोज पथ को आगे बढ़ाना आवश्यक है ताकि pkg-config .pc फ़ाइलों का पता लगा सके।

pkg-configकार्यक्रम प्रणाली में स्थापित पुस्तकालयों बारे में जानकारी प्राप्त करने के लिए प्रयोग किया जाता है। pkg-configकिसी प्रोग्राम को लाइब्रेरी में संकलित करने और लिंक करने के लिए आवश्यक विवरण प्रदान करना इसका प्राथमिक उपयोग है। यह मेटाडेटा pkg-config फ़ाइलों में संग्रहीत है। इन फ़ाइलों में प्रत्यय .pc है और pkg-config टूल के लिए ज्ञात विशिष्ट स्थानों में रहता है।

जांच करने के लिए PKG_CONFIG_PATHमूल्य उपयोग इस आदेश:

echo $PKG_CONFIG_PATH

PKG_CONFIG_PATHमान उपयोग सेट करने के लिए:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

या

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

@NathanKidd रिमाइंडर के लिए धन्यवाद, टिप्पणी हटा दी गई। लगता है कि मूल त्रुटि वैसे भी एक गैर-मूल लेखक द्वारा संपादित की गई है।
टिमोथी गुजरात

@remram ऐसा लगता है कि त्रुटियां अब तय हो गई हैं, लेकिन आपकी टिप्पणी लोगों को भ्रमित करती है अगर वे ध्यान से संपादित इतिहास की जांच नहीं करते हैं। क्या आप जाँच सकते हैं कि आप वर्तमान सटीकता से खुश हैं और शायद टिप्पणी को हटा दें? (या मैं खुद को नष्ट कर दूंगा।)
नाथन किड

@ devav2 दोनों निर्यात कमांड समस्या को ठीक नहीं करते हैं
Shayan

38

पहला उत्तर तकनीकी रूप से पर्याप्त स्पष्ट नहीं है। मैन पेज से (टर्मिनल खोलें, टाइप करें man pkg-config):

pkg-configविशेष मेटाडेटा फ़ाइलों से संकुल के बारे में जानकारी प्राप्त करता है। इन फ़ाइलों को पैकेज के नाम पर रखा गया है, और इनका .pcविस्तार है। सबसे सिस्टम पर, pkg-config में लग रहा है /usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfigऔर /usr/local/share/pkgconfigइन फ़ाइलों के लिए। इसके अलावा PKG_CONFIG_PATHपर्यावरण चर द्वारा निर्दिष्ट निर्देशिकाओं की बृहदान्त्र-पृथक (विंडोज पर, अर्धविराम से अलग) सूची में दिखेगा ।

तो pkg-configकार्यक्रम PKG_CONFIG_PATHनिर्देशिका में नहीं है ; हालाँकि, यदि आप एक पुस्तकालय स्थापित करते हैं, तो जानकारी के लिए इसे automakeस्क्रिप्ट में उपयोग करने के लिए इसे एक निर्देशिका pkg-configमें होना आवश्यक है।


मुख्य वाक्यांश "अधिकांश प्रणालियों पर" प्रतीत होता है। उदाहरण के लिए, मेरे डेबियन पर, हम /usr/local/lib/x86_64-linux-gnuमुफ़्त में (खाली के साथ PKG_CONFIG_PATH), और वास्तव में, बहुत सारी .pcफाइलें - जीटीके + एट अल सहित उल्लेखनीय हैं। - वहाँ रहते हैं। इसका कारण एक पैकेज की बहु-वास्तुकला उपलब्धता को एक साथ सक्षम करना है, जैसा कि यहां बताया गया है: askubuntu.com/questions/449348/…
अंडरस्कोर_ड

(अब संपादित नहीं कर सकते) @GrandAdmiral ने एक उत्तर में इस पृष्ठ को नीचे दिखाया कि pkg-configआपके सिस्टम पर खोज करने वाले डिफ़ॉल्ट रास्तों की जांच कैसे करें : askubuntu.com/a/373217/436580
underscore_d

35

यह देखने के लिए कि pkg-config (संस्करण 0.24 या बाद का संस्करण) डिफ़ॉल्ट रूप से स्थापित लाइब्रेरी की खोज करता है, निम्न कमांड का उपयोग करें:

pkg-config --variable pc_path pkg-config

उस पथ को संशोधित करने के लिए, PKG_CONFIG_PATHपर्यावरण चर सेट करें । मैन फाइल स्टेट्स PKG_CONFIG_PATHहै:

पीसी के लिए खोज करने के लिए निर्देशिकाओं की एक बृहदान्त्र-अलग (विंडोज पर, अर्धविराम से अलग) सूची। डिफ़ॉल्ट निर्देशिका हमेशा पथ की खोज के बाद खोज की जाएगी; डिफ़ॉल्ट लिबिडिर / pkgconfig है: डेटैडिर / pkgconfig जहां लिबिडिर वह लिबिडिर है जहां pkg-config और datadir डेटादिर है जहां pkg-config स्थापित किया गया था।


3
एक उपयोगी स्क्रिप्ट होगीecho $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
एल्बफैन

5
यह एक शानदार जवाब है जिसने मुझे मदद की। हालाँकि, स्पष्ट करने के लिए, आपको "उस पथ में जोड़ने के लिए" कहना चाहिए, बजाय "संशोधित करने के लिए", क्योंकि एक रिक्त हो सकता है PKG_CONFIG_PATHऔर अभी भी डिफ़ॉल्ट खोज निर्देशिकाएं हो सकती हैं, साथ ही एक गैर-रिक्त मान सेट करने से चूक साफ़ नहीं होती है।
अंडरस्कोर_ड

यह उत्तर मेरे लिए वास्तव में उपयोगी था, धन्यवाद! मैं यह पता लगाने की कोशिश कर रहा था कि pkg-config के लिए डिफ़ॉल्ट खोज पथ क्या था क्योंकि मेरा Linux Linuxww के साथ स्थापित है, इसलिए डिफ़ॉल्ट पथ मौजूद नहीं है। धन्यवाद!
mxplusb

6

आप सॉफ्टवेयर का एक टुकड़ा बनाने की कोशिश कर रहे हैं, चलो विजेट कहते हैं। विजेट तर्क के लिए एक अन्य पुस्तकालय, libcog पर निर्भर करता है। काम करने की विधि का निर्धारण करने के लिए विजेट की निर्माण प्रक्रिया (शायद एक कॉन्फ़िगर स्क्रिप्ट) pkg-config का उपयोग कर रही है। pkg-config libcog के बारे में कुछ नहीं जानता।

यदि libcog स्थापित नहीं है, तो यह आपकी समस्या है। एक अच्छा मौका है कि libcog की एक मानक स्थापना समस्या को ठीक कर देगी। आपके सिस्टम के आधार पर, आपको पैकेज के अतिरिक्त "डेवलपर" संस्करण को स्थापित करने की आवश्यकता हो सकती है; इसके अंत में अक्सर "-वेल" या "-देव" होता है, इसलिए यदि आप "लिबकॉग" स्थापित करते हैं, तो आपको "लिबकॉग-डेवेल" भी स्थापित करना पड़ सकता है।

यदि libcog इंस्टॉल किया गया है, तो संभवतः यह एक तरह से स्थापित नहीं है कि pkg-config इसे पा सकता है। आपके सिस्टम पर कहीं एक libcog.pc फ़ाइल है। तर्क के लिए, यह /opt/cog/lib/pkgconfig/libcog.pc पर है। उस स्थिति में, आप PKG_CONFIG_PATH को डायरेक्टरी libcog.pc पर सेट करके इसके बारे में pkg-config बता सकते हैं। तो एक बॉर्न शेल या इसी तरह के कुछ में

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/

एक बार ऐसा हो जाने के बाद, विफल हुई कमांड को फिर से चलाना उम्मीद से काम करेगा।

यदि पुस्तकालयों और हेडर फ़ाइलों सहित libcog स्थापित है, और आपके पास libcog.pc फ़ाइल नहीं है, तो चीजें खराब हो रही हैं। संभवतः libcog के एक मानक इंस्टॉलेशन में जानकारी शामिल है, या फिर विजेट उस पर भरोसा नहीं करेगा। मैं पहले libcog को फिर से इंस्टॉल करने की जाँच करूँगा। यह libcog.pc फ़ाइल को मैन्युअल रूप से बनाना संभव है, लेकिन इसे सही करना मुश्किल है और किसी दिए गए पुस्तकालय के लिए अत्यधिक विशिष्ट है।


4
हालांकि एक बात - अगर PKG_CONFIG_PATH को परिभाषित किया जाता है - तो क्या यह सही होगा?
NoBugs

1
@NoBugs अच्छी पकड़ है, मैंने इसके बजाय इसे जोड़ने के लिए (कई साल बाद!) उत्तर को संपादित किया है।
जो माल्ट

5

मैंने अपने 64-बिट सिस्टम पर मैन-पेज को देखा और थोड़ा भ्रमित हो गया। यह एक पंक्ति में कहा गया है:

pkg-config विशेष मेटाडेटा फ़ाइलों से संकुल के बारे में जानकारी प्राप्त करता है। इन फ़ाइलों को पैकेज के नाम पर एक्सटेंशन .pc के साथ रखा गया है। डिफ़ॉल्ट रूप से, इन फ़ाइलों के लिए direcory tory उपसर्ग / lib / pkgconfig में pkg-config दिखता है; यह भी PKG_CONFIG_PATH पर्यावरण var by द्वारा निर्दिष्ट निर्देशिकाओं की बृहदान्त्र-पृथक (विंडोज पर, अर्धविराम से अलग) सूची में दिखेगा।

मैंने यह मान लिया था कि यह अलवा डायरेक्शंस / pkgconfig डायरेक्टरी में दिखता है। अपनी निर्देशिका खुद बाहर कर देता है। मेरे मामले में, मैं हैलो वर्ल्ड gtk ट्यूटोरियल को संकलित करने की कोशिश कर रहा था। मैं उस फ़ाइल का पता लगाता हूँ जो मैं चाहता हूँ

locate gtk | grep '\.pc'

परिणामों में से हैं:

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

अंत में एक निर्यात करना था।

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/

1
+1 यह इंगित करने के लिए कि manआधुनिक, बहु-वास्तुकला-सक्षम प्रणालियों के लिए पृष्ठ किस तरह से उपयोगी है। मैं थोड़ी देर के लिए उलझन में था, क्योंकि डेबियन 8 x86 पर, pkg-configपहले से ही x86_64 फ़ोल्डर (कुछ भी बिना PKG_CONFIG_PATH) में दिखता है । मुझे यकीन नहीं है कि इसे कैसे शामिल किया गया था, लेकिन @GrandAdmiral द्वारा दिखाया गया यह जांच करने के लिए कमांड लाइन इंगित करता है --variable pc_pathकि यह उस द्वारा नियंत्रित है (किसी भी तरह!) के pkg-configअपने पैकेज के लिए निर्धारित है ।
अंडरस्कोर_ड

5

यह मुझे लगता है कि अधिकांश उत्तरों में ज़रूरत से ज़्यादा जानकारी है।

सॉफ़्टवेयर जो इंस्टॉल करता है (और आमतौर पर करता है) कुछ पुस्तकालयों और / या हेडर पर भरोसा करता है और सिस्टम उन्हें खोजने के लिए pkg-config का उपयोग करता है।

कहा, pkg-configइस फाइल को पूर्व-परिभाषित (डिफॉल्ट) सिस्टम के डाइरेक्टरीज़ में खोजता है। वे फ़ोल्डर "उपसर्ग" हैं। उदाहरण के लिए उपसर्ग वाले पुस्तकालय /usr/localमें हेडर होने की उम्मीद है /usr/local/include, और पुस्तकालय स्वयं में होगा /usr/local/libpkg-config हालांकि पुस्तकालयों के लिए पर्यावरण चर PKG_CONFIG_PATH में सूचीबद्ध निर्देशिका में भी दिखता है ।

फिर यदि आप फोल्डर की डिफ़ॉल्ट सूची के बाहर सॉफ्टवेयर स्थापित करते हैं, तो आपको सूची को "एडजस्ट" करना होगा, अर्थात् अपनी निर्देशिकाओं को पीकेजी_कोनफिग_पैथ में जोड़ें।

$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>

अधिक जानकारी के लिए, आप यहां और यहां देख सकते हैं


PKG_CONFIG_PATHअतिरिक्त निर्देशिकाओं को निर्दिष्ट करता है जिसमें केवल yourPkg.pc ( pkg-configविनिर्देशन) फ़ाइलों को खोजना है । यह पुस्तकालय खोज निर्देशिका जैसी pkg- विशिष्ट चीजों को प्रभावित नहीं करता है।
अंडरस्कोर_ड

1

इसका मतलब है कि आप स्रोत से कुछ बनाने की कोशिश कर रहे हैं, और यह उन सभी निर्भरताओं को नहीं पा सकता है जिनकी इसे ज़रूरत है। यह pkg-configस्क्रिप्ट उन पुस्तकालयों के लिए विकास फ़ाइलों को खोजने के लिए उपयोग करता है, इस संदेश को आउटपुट करता है।


0

मैं एक्सल के नवीनतम संस्करण को स्थापित करने की कोशिश कर रहा था और मैं भाग गया ./configureऔर मुझे यह मिल गया:

configure: error: Package requirements (openssl) were not met:

No package 'openssl' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables SSL_CFLAGS
and SSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

इसलिए मैंने कोशिश की:

$ pkg-config --cflags openssl

और मुझे मिल गया:

Package openssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `openssl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'openssl' found

जैसा कि मैंने स्पष्ट रूप से इंस्टॉल किया हुआ ओपनसेल स्थापित किया था ( sudo apt-get install openssl) लेकिन उपरोक्त आउटपुट पर जैसा कि आप देख सकते हैं कि यह "नो पैकेज 'ओपनसेल' पाया गया" है। इसलिए यह सुनिश्चित करने के लिए कि मैंने किया:

find / -type f -name "*.pc" |& grep -iv permission | grep openssl

मुझे पता है कि मुझे यकीन है कि कुछ अन्य पैकेज की आवश्यकता है, इसलिए थोड़ी सी गुगली और मैंने पाया कि मुझे इस पैकेज को स्थापित करना है:

sudo apt-get install libssl-dev

और इन सबका बदलते pkg-config path env चर से कोई लेना-देना नहीं था।


0

जो लोग https://github.com/confluentinc/confluent-kafka-go का उपयोग कर रहे हैं

कृपया librdkafka स्थापित करने का पालन करें

  1. git clone https://github.com/edenhill/librdkafka.it
  2. सीडी librdkafka
  3. ./configure --prefix / usr
  4. बनाना
  5. सुडोल बनाते हैं

अब आप गो इंस्टाल / गो रन गो बिल्ड का उपयोग कर सकते हैं

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