यदि आप एक गैर-मानक उपसर्ग में सॉफ़्टवेयर स्थापित करते हैं, तो PKG_CONFIG_PATH पर्यावरण चर को समायोजित करने पर विचार करें। इसका क्या मतलब है ?
यदि आप एक गैर-मानक उपसर्ग में सॉफ़्टवेयर स्थापित करते हैं, तो PKG_CONFIG_PATH पर्यावरण चर को समायोजित करने पर विचार करें। इसका क्या मतलब है ?
जवाबों:
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
पहला उत्तर तकनीकी रूप से पर्याप्त स्पष्ट नहीं है। मैन पेज से (टर्मिनल खोलें, टाइप करें 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/…
pkg-config
आपके सिस्टम पर खोज करने वाले डिफ़ॉल्ट रास्तों की जांच कैसे करें : askubuntu.com/a/373217/436580
यह देखने के लिए कि pkg-config (संस्करण 0.24 या बाद का संस्करण) डिफ़ॉल्ट रूप से स्थापित लाइब्रेरी की खोज करता है, निम्न कमांड का उपयोग करें:
pkg-config --variable pc_path pkg-config
उस पथ को संशोधित करने के लिए, PKG_CONFIG_PATH
पर्यावरण चर सेट करें । मैन फाइल स्टेट्स PKG_CONFIG_PATH
है:
पीसी के लिए खोज करने के लिए निर्देशिकाओं की एक बृहदान्त्र-अलग (विंडोज पर, अर्धविराम से अलग) सूची। डिफ़ॉल्ट निर्देशिका हमेशा पथ की खोज के बाद खोज की जाएगी; डिफ़ॉल्ट लिबिडिर / pkgconfig है: डेटैडिर / pkgconfig जहां लिबिडिर वह लिबिडिर है जहां pkg-config और datadir डेटादिर है जहां pkg-config स्थापित किया गया था।
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
और अभी भी डिफ़ॉल्ट खोज निर्देशिकाएं हो सकती हैं, साथ ही एक गैर-रिक्त मान सेट करने से चूक साफ़ नहीं होती है।
आप सॉफ्टवेयर का एक टुकड़ा बनाने की कोशिश कर रहे हैं, चलो विजेट कहते हैं। विजेट तर्क के लिए एक अन्य पुस्तकालय, 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 फ़ाइल को मैन्युअल रूप से बनाना संभव है, लेकिन इसे सही करना मुश्किल है और किसी दिए गए पुस्तकालय के लिए अत्यधिक विशिष्ट है।
मैंने अपने 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/
man
आधुनिक, बहु-वास्तुकला-सक्षम प्रणालियों के लिए पृष्ठ किस तरह से उपयोगी है। मैं थोड़ी देर के लिए उलझन में था, क्योंकि डेबियन 8 x86 पर, pkg-config
पहले से ही x86_64 फ़ोल्डर (कुछ भी बिना PKG_CONFIG_PATH
) में दिखता है । मुझे यकीन नहीं है कि इसे कैसे शामिल किया गया था, लेकिन @GrandAdmiral द्वारा दिखाया गया यह जांच करने के लिए कमांड लाइन इंगित करता है --variable pc_path
कि यह उस द्वारा नियंत्रित है (किसी भी तरह!) के pkg-config
अपने पैकेज के लिए निर्धारित है ।
यह मुझे लगता है कि अधिकांश उत्तरों में ज़रूरत से ज़्यादा जानकारी है।
सॉफ़्टवेयर जो इंस्टॉल करता है (और आमतौर पर करता है) कुछ पुस्तकालयों और / या हेडर पर भरोसा करता है और सिस्टम उन्हें खोजने के लिए pkg-config का उपयोग करता है।
कहा, pkg-config
इस फाइल को पूर्व-परिभाषित (डिफॉल्ट) सिस्टम के डाइरेक्टरीज़ में खोजता है। वे फ़ोल्डर "उपसर्ग" हैं। उदाहरण के लिए उपसर्ग वाले पुस्तकालय /usr/local
में हेडर होने की उम्मीद है /usr/local/include
, और पुस्तकालय स्वयं में होगा /usr/local/lib
।
pkg-config हालांकि पुस्तकालयों के लिए पर्यावरण चर PKG_CONFIG_PATH में सूचीबद्ध निर्देशिका में भी दिखता है ।
फिर यदि आप फोल्डर की डिफ़ॉल्ट सूची के बाहर सॉफ्टवेयर स्थापित करते हैं, तो आपको सूची को "एडजस्ट" करना होगा, अर्थात् अपनी निर्देशिकाओं को पीकेजी_कोनफिग_पैथ में जोड़ें।
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
अतिरिक्त निर्देशिकाओं को निर्दिष्ट करता है जिसमें केवल yourPkg.pc
( pkg-config
विनिर्देशन) फ़ाइलों को खोजना है । यह पुस्तकालय खोज निर्देशिका जैसी pkg- विशिष्ट चीजों को प्रभावित नहीं करता है।
मैं एक्सल के नवीनतम संस्करण को स्थापित करने की कोशिश कर रहा था और मैं भाग गया ./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 चर से कोई लेना-देना नहीं था।
जो लोग https://github.com/confluentinc/confluent-kafka-go का उपयोग कर रहे हैं
कृपया librdkafka स्थापित करने का पालन करें
अब आप गो इंस्टाल / गो रन गो बिल्ड का उपयोग कर सकते हैं