PKG_CONFIG_PATH পরিবেশ পরিবর্তনশীল


74

আপনি যদি মানহীন উপসর্গটিতে সফ্টওয়্যার ইনস্টল করেন তবে PKG_CONFIG_PATH এনভায়রনমেন্ট ভেরিয়েবল সামঞ্জস্য করুন। এটার মানে কি ?


1
"PKG_CONFIG_PATH পরিবেশের পরিবর্তনশীল যেমন" এটি কী এবং আমি কীভাবে এটি ব্যবহার করব? "এর সঠিক ব্যবহারের উদাহরণ না চাইতেই আমি প্রায় একইভাবে জিজ্ঞাসা করব? দেখে মনে হচ্ছে আপনি যে উত্তর পেয়েছেন সেগুলি আপনাকে এটি বলার চেষ্টা করছে। । / কনফিগার করার সময় আমি এই শোটি অনেক খুঁজে পাচ্ছি যখন এটি নির্ভরতা খুঁজে পেতে ব্যর্থ হয়।
ডগলাস জি। অ্যালেন

উত্তর:


68

PKG_CONFIG_PATHপরিবেশের পরিবর্তনশীল এটি অতিরিক্ত পাথ নির্দিষ্ট করে যেখানে pkg-configএর .pc ফাইলগুলি অনুসন্ধান করবে।

এই পরিবর্তনশীলটি পিকেজি-কনফিগারেশনের ডিফল্ট অনুসন্ধানের পথটি বাড়ানোর জন্য ব্যবহৃত হয়। একটি সাধারণ ইউনিক্স সিস্টেমে এটি ডিরেক্টরিতে /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

@ নাথানকিড এই অনুস্মারকটির জন্য ধন্যবাদ, মন্তব্য মুছে ফেলা হয়েছে। মূল ত্রুটি মনে হয় কোনওভাবেই অ-আসল লেখক সম্পাদনার ফলে হয়েছিল।
তীমথিয় গু

@ রেরাম দেখে মনে হচ্ছে ত্রুটিগুলি এখন ঠিক হয়ে গেছে তবে আপনার মন্তব্য লোকেরা বিভ্রান্ত হয়ে পড়ে যদি তারা সাবধানে সম্পাদনার ইতিহাস পরীক্ষা না করে। আপনি কি বর্তমানের নির্ভুলতায় খুশি এবং মন্তব্যটি মুছে ফেলতে পারবেন? (এবং আমি আমার মুছে ফেলব))
নাথান কিড

@ ডিভভ 2 উভয় রফতানি কমান্ডই সমস্যার সমাধান করে না
শায়ান

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ফাইল - জিটিকে + এট এল সহ উল্লেখযোগ্য। - সেখানে থাকুন। এর কারণ হ'ল
আন্ডারস্কোর_২১

(আর সম্পাদনা করতে পারে না) @ গ্র্যান্ডএডমিরাল এই পৃষ্ঠায় আরও উত্তর দিয়ে দেখিয়েছে যে কীভাবে pkg-configআপনার সিস্টেমে অনুসন্ধান করা ডিফল্ট পাথ চেক করতে হবে: Askubuntu.com/a/373217/436580
আন্ডারস্কোর_ে

35

Pkg-config (সংস্করণ 0.24 বা তার পরে) ডিফল্টরূপে ইনস্টলড লাইব্রেরিগুলির জন্য অনুসন্ধান করে তা দেখতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

pkg-config --variable pc_path pkg-config

সেই পথটি সংশোধন করতে, PKG_CONFIG_PATHপরিবেশের পরিবর্তনশীল সেট করুন । ম্যান ফাইল ফাইলটি PKG_CONFIG_PATHহ'ল:

.Pc ফাইলগুলি অনুসন্ধান করার জন্য ডিরেক্টরিগুলির তালিকার একটি কোলন-বিচ্ছিন্ন (উইন্ডোজে, অর্ধেকোলন-বিচ্ছিন্ন) ডিফল্ট ডিরেক্টরিটি সর্বদা পথ অনুসন্ধানের পরে অনুসন্ধান করা হবে; ডিফল্ট হল libdir / pkgconfig: datadir / pkgconfig যেখানে libdir হল libdir যেখানে pkg-config এবং datadir সেই datadir যেখানে pkg-config ইনস্টল করা হয়েছিল।


3
একটি দরকারী স্ক্রিপ্ট হবেecho $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
আলফান

5
এটি একটি দুর্দান্ত উত্তর যা আমাকে সাহায্য করেছিল। তবে, স্পষ্ট করার জন্য, আপনাকে "পরিবর্তনের জন্য" পরিবর্তে "সেই পথে যুক্ত করতে" বলতে হবে, কারও একটি ফাঁকা থাকতে পারে PKG_CONFIG_PATHএবং এখনও ডিফল্ট অনুসন্ধান ডিরেক্টরি থাকতে পারে, এবং একটি ফাঁকা মান সেট করা ডিফল্টগুলি সাফ করে না।
আন্ডারস্কোর_ডি

এই উত্তরটি আমার পক্ষে সত্যই কার্যকর ছিল, ধন্যবাদ! লিনাক্সব্রিউয়ের সাথে খনি ইনস্টল করা হওয়ায় পিকেজি-কনফিগারেশনের জন্য ডিফল্ট অনুসন্ধানের পথটি কী তা আবিষ্কার করার চেষ্টা করছিলাম তাই ডিফল্ট পাথের অস্তিত্ব নেই। ধন্যবাদ!
এমএপলাপস্লব

6

আপনি একটি সফ্টওয়্যার তৈরির চেষ্টা করছেন, উইজেট বলি। উইজেট আর একটি লাইব্রেরির উপর নির্ভর করে, যুক্তির খাতিরে libcog। উইজেটের বিল্ড প্রক্রিয়া (সম্ভবত একটি কনফিগার স্ক্রিপ্ট) কীভাবে লাইবকোগ ব্যবহার করবেন তা নির্ধারণ করতে pkg-config ব্যবহার করছে। pkg-config libcog সম্পর্কে কিছুই জানে না।

যদি libcog ইনস্টল না হয়, এটি আপনার সমস্যা। লিবকোগের একটি স্ট্যান্ডার্ড ইনস্টল সমস্যাটি সমাধান করবে এমন একটি ভাল সম্ভাবনা রয়েছে। আপনার সিস্টেমের উপর নির্ভর করে আপনার প্যাকেজের একটি অতিরিক্ত "বিকাশকারী" সংস্করণ ইনস্টল করতে হবে; এটি প্রায়শই শেষে "-devel" বা "-দেব" থাকে, সুতরাং আপনি যদি "libcog" ইনস্টল করেন তবে আপনাকে "libcog-devel" ইনস্টল করারও প্রয়োজন হতে পারে।

যদি libcog ইনস্টল করা থাকে, সম্ভবত এটি pkg-config এটির মতো আবিষ্কার করতে পারে না। আপনার সিস্টেমে সম্ভবত একটি libcog.pc ফাইল আছে। তর্কের পক্ষে, এটি /opt/cog/lib/pkgconfig/libcog.pc এ রয়েছে। সেক্ষেত্রে আপনি libcog.pc অধিবেশন ডিরেক্টরিতে PKG_CONFIG_PATH সেট করে পিকেজি-কনফিগার করতে পারেন। সুতরাং একটি বোর্ন শেল বা অনুরূপ, কিছু

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

এটি হয়ে গেলে, কমান্ডটি পুনরায় চালনা করা ব্যর্থ হয়েছে আশা করি এটি কার্যকর হবে।

লাইব্রেরি এবং শিরোলেখ ফাইল সহ libcog ইনস্টল থাকলে এবং আপনার কাছে একটি libcog.pc ফাইল নেই, জিনিসগুলি খারাপভাবে চলছে। সম্ভবত libcog এর একটি স্ট্যান্ডার্ড ইনস্টল ইন তথ্য অন্তর্ভুক্ত, অন্যথায় উইজেট এটি উপর নির্ভর করবে না। আমি প্রথমে লাইবকোগ পুনরায় ইনস্টল করে তদন্ত করব। Libcog.pc ফাইলটি ম্যানুয়ালি তৈরি করা সম্ভব, তবে এটি সঠিকভাবে পাওয়া কঠিন এবং প্রদত্ত লাইব্রেরির পক্ষে অত্যন্ত নির্দিষ্ট।


4
তবে একটি জিনিস - যদি PKG_CONFIG_PATH সংজ্ঞায়িত হয় - তবে এটি কি ওভাররাইটটি সঠিকভাবে করবে?
NoBugs

1
@ নোবাগস ভাল ধরা, এর পরিবর্তে আমি যুক্ত করতে (বেশ কয়েক বছর পরে!) সম্পাদনা করেছি।
জো মাল্ট

5

আমি আমার -৪-বিট সিস্টেমে ম্যান-পৃষ্ঠার দিকে তাকিয়ে কিছুটা বিভ্রান্ত হয়ে পড়েছি। এটি এক লাইনে বলেছে:

pkg-config বিশেষ মেটাডেটা ফাইল থেকে প্যাকেজগুলি সম্পর্কে তথ্য পুনরুদ্ধার করে। এই ফাইলগুলি প্যাকেজের নামে .pc এক্সটেনশন সহ নামকরণ করা হয়েছে। ডিফল্টরূপে, pkg-config এই ফাইলগুলির জন্য ডাইরেক্টরি টিউরিফিক্স / lib / pkgconfig এ দেখায়; এটি কোলন-বিচ্ছিন্ন (উইন্ডোজে, সেমিকোলন-বিচ্ছিন্ন) ডিরেক্টরিগুলি PKG_CONFIG_PATH পরিবেশগত পার্থক্য অনুযায়ী সক্ষম ডিরেক্টরিগুলির মধ্যেও দেখবে।

আমি ধরে নিয়েছিলাম যে এটি আলওয়াস ডিরেক্টরিতে / lib / pkgconfig ডিরেক্টরিতে দেখায়। এর ডিরেক্টরিগুলি নিজেরাই সরিয়ে দেয়। আমার ক্ষেত্রে, আমি হ্যালো ওয়ার্ল্ড জিটিকে টিউটোরিয়াল সংকলন করার চেষ্টা করছিলাম। আমি যে ফাইলটি চাই তা সনাক্ত করি

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
manপৃষ্ঠাটি আধুনিক, মাল্টি-আর্কিটেকচার-সক্ষম সিস্টেমগুলির জন্য কীভাবে ওভারসিম্প্লিফাই করা হচ্ছে তা নির্দেশ করার জন্য +1 । আমি কিছুক্ষণের জন্য বিভ্রান্ত হয়ে পড়েছিলাম কারণ ডেবিয়ান 8 x86 এ pkg-configইতিমধ্যে x86_64 ফোল্ডারে (কোনও কিছু ছাড়াই PKG_CONFIG_PATH) দেখছে । এটি কীভাবে অন্তর্ভুক্ত করা হয়েছিল তা আমি নিশ্চিত নই, তবে @ গ্র্যান্ডএডমিরাল দ্বারা এটি দেখানোর জন্য তদন্ত করার জন্য যে কমান্ড লাইনটি দেখায় এটি নিজস্ব প্যাকেজের --variable pc_pathজন্য সেটটি (কোনওভাবে!) সেট করে এটি নিয়ন্ত্রণ করে pkg-config
আন্ডারস্কোর_ডি

5

আমার কাছে মনে হয় বেশিরভাগ উত্তরের প্রয়োজনের তুলনায় অনেক বেশি তথ্য রয়েছে।

একটি ইনস্টল করা সফ্টওয়্যার কিছু লাইব্রেরি এবং / অথবা শিরোলেখগুলিতে নির্ভর করে (এবং সাধারণত এটি করে) এবং সিস্টেমগুলি তাদের অনুসন্ধানের জন্য pkg-config ব্যবহার করে।

বলেছিলেন, pkg-configপ্রাক-সংজ্ঞায়িত (ডিফল্ট) সিস্টেমের ডিরেক্টরিতে এই ফাইলগুলির সন্ধান করুন। এই ফোল্ডারগুলি হ'ল "উপসর্গ"। উদাহরণস্বরূপ একটি লাইব্রেরির উপসর্গ রয়েছে এমনটি /usr/localশিরোনাম রয়েছে বলে আশা করা হয় এবং পাঠাগারটি /usr/local/includeনিজেই এতে থাকবে /usr/local/libপিকেজি-কনফিগারেশন প্যাকেজি_সিএনএফআইজিপিএটিএইচ এনভায়রনমেন্ট ভেরিয়েবলের তালিকাভুক্ত ডিরেক্টরিতে লাইব্রেরিগুলির সন্ধান করে

তারপরে আপনি যদি ফোল্ডারগুলির ডিফল্ট তালিকার বাইরে সফ্টওয়্যার ইনস্টল করেন তবে আপনাকে তালিকাটি "অ্যাডজাস্ট" করতে হবে, নামগুলি আপনার ডিরেক্টরিগুলি PKG_CONFIG_PATH এ যুক্ত করুন

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

আরও তথ্যের জন্য, আপনি এখানে এবং এখানে দেখতে পারেন


PKG_CONFIG_PATHকেবলমাত্র yourPkg.pc ( pkg-configস্পেসিফিকেশন) ফাইলগুলি অনুসন্ধান করতে অতিরিক্ত ডিরেক্টরি সুনির্দিষ্ট করে। এটি গ্রন্থাগার অনুসন্ধান ডিরেক্টরিগুলির মতো পিকেজি-নির্দিষ্ট জিনিসগুলিকে প্রভাবিত করে না।
আন্ডারস্কোর_ডি

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- কনফিগার পাথ env ভেরিয়েবল পরিবর্তন সঙ্গে কিছুই ছিল।


0

যারা https://github.com/confluentinc/confluent-kafka-go ব্যবহার করছেন

Librdkafka ইনস্টল করুন দয়া করে

  1. গিট ক্লোন https://github.com/edenhill/librdkafka.git
  2. সিডি লিবার্ডকাফকা
  3. ./ কনফিগার - প্রিফিক্স / ইউএসআর
  4. করা
  5. sudo মেক ইনস্টল

এখন আপনি গো ইনস্টল / গো রান রান বিল্ড ব্যবহার করতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.