এলডি_লিবিআরএইপিএইচটি কোথায়? আমি কীভাবে এলডি_লিবিআরএইপিএটিএইচ এনভির ভেরিয়েবল সেট করব?


26

আমি ইউনিক্স ব্যবহার করে একটি সি ++ প্রোগ্রাম তৈরির চেষ্টা করছি।

আমি ত্রুটি পেয়েছি

Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt

আমি শুনেছি যে আমার এলডি_লিবিআরএপিএটিএইচ এনভির ভেরিয়েবলের মধ্যে আমার কেবল লাইববুস্ট * এর অবস্থান নির্ধারণ করা উচিত এবং তারপরে টাইপ করে আমি যেমনটি করেছি ঠিক তেমন অনুরোধ করব

-L /usr/lib64 -l boost_regex-mt

অথবা

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

তবে এলডি_লিবিআরএইপিএইচটি কোথায়? আমি কীভাবে এলডি_লিবিআরএইপিএটিএইচ এনভির ভেরিয়েবল সেট করব?


আপনি যখন আপনার সমস্যাটি বোঝার জন্য কিছু দরকারী প্রসঙ্গ সরবরাহ করছেন তখন আপনি কেন আপনার বেশিরভাগ প্রশ্নের সম্পাদনা করেছিলেন?
jlliagre

@ জেলিয়াগ্র্রে আমি সম্মত: মূল প্রশ্নের দ্বারা সরবরাহিত প্রসঙ্গটি ছাড়াই, শীর্ষ ভোটের উত্তরটি কোনও অর্থহীন নয়। আমি এটি পিছনে ঘূর্ণিত।
1024

উত্তর:


25

আমি কীভাবে এলডি_লিবিআরএইপিএটিএইচ এনভির ভেরিয়েবল সেট করব?

আপনি যখন এটি করেছেন তখন আপনি এটি ইতিমধ্যে সেট করে রেখেছেন:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

তবে এটি আপনার সমস্যার সমাধান করবে না। $LD_LIBRARY_PATHকার্যকরভাবে লিঙ্কযোগ্য লাইব্রেরি অনুসন্ধান করার জন্য অতিরিক্ত ডিরেক্টরিগুলির একটি তালিকা সরবরাহের জন্য মৃত্যুদন্ড কার্যকর করার সময় পরামর্শ নেওয়া হয়। এটি লিংক সময়ে পরামর্শ করা হয় না (সম্ভবত নির্মিত সরঞ্জামগুলির দ্বারা প্রয়োজনীয় লাইব্রেরিগুলি সনাক্ত করার জন্য ব্যতীত!)।

নির্মাণের সময় লাইব্রেরিগুলি কোথায় খুঁজে পেতে হবে তা লিঙ্কারে বলার জন্য আপনাকে -Lলিঙ্কার বিকল্পটি ব্যবহার করতে হবে । আপনি ইতিমধ্যে এটিও করেছেন:

-L /usr/lib64

আপনি যদি এখনও ত্রুটিটি পেয়ে থাকেন তবে লাইব্রেরিটি আসলে আছে কিনা তা আপনাকে নিশ্চিত করা দরকার। আপনার কাছে কোনও ফাইল আছে libboost_regex-mt.soবা libboost_regex-mt.aসেই (বা কোনও) ডিরেক্টরিতে? নোট করুন যে একটি ফাইল libboost_regex-mt.so.othersuffixএই উদ্দেশ্যে গণনা করে না। আপনার যদি তা না থাকে তবে সম্ভবত আপনার এই লাইব্রেরির জন্য আপনার বিতরণের বিকাশ প্যাকেজ ইনস্টল করতে হবে।


লিনাক্সের অধীনে, ld (1) ম্যান পৃষ্ঠা অনুসারে, নিম্নলিখিত পরামর্শও $LD_LIBRARY_PATHদেওয়া হয় ld: «5. কোনও স্থানীয় লিঙ্কারের জন্য, পরিবেশের পরিবর্তনশীল" এলডি_লিবিআরএআইপিএটিএইচ "এর বিষয়বস্তু সন্ধান করুন। »
ভিঙ্ক

@ সিএসএক্স - আপনার ডিস্ট্রো কি? উবুন্টু, ফেডোরা, সেন্টসস ইত্যাদি? এখানে দেখুন, উদাহরণস্বরূপ: stackoverflow.com/questions/15874220/…
স্ল্যাম

@ ভিনক ১17, ম্যানপেজ থেকে এই উদ্ধৃতিটি ldকেবল পুনরাবৃত্ত নির্ভরশীলতা সম্পর্কিত: একটি লাইব্রেরির নির্ভরশীল লাইব্রেরি যা ইতিমধ্যে সংযুক্ত হওয়ার জন্য নির্বাচিত হয়েছিল It এটি কার্যকর করার যোগ্য জন্য লাইব্রেরি সন্ধানের বিষয় নয়। এটা কি -Lকরে।
সেলেদা

@ সিএসসিএক্স আমি বৈজ্ঞানিক লিনাক্স সম্পর্কে কিছুই জানিনা, তবে apt-getআপনাকে যদি আদেশ দেয় তবে এটি পাওয়া যায় না এটি ডিবান থেকে প্রাপ্ত নয় সুতরাং আপনার অনুপস্থিত প্যাকেজ ইনস্টল করার জন্য অন্য পদ্ধতি প্রয়োজন। এটি অবশ্যই আপনার সমস্যাটি হ'ল।
সেলেদা

দেরীতে তবে: লিঙ্ক ফেজ অন্তর্ভুক্ত করার সময় বা তার সাথে -Ldir -llibযুক্তি হিসাবে কাজ করা উচিত তবে মূল এবং পুনরুদ্ধারকৃত Q উল্লেখ করেছে : একটি সাধারণ মেকফিলের সাথে আপনার সম্ভবত প্রয়োজন এবং একটি চৌকস মেকফিলের সাহায্যে আপনার চালাক মেকফিল লেখককে ফেলে দেওয়ার জন্য ইট সহ প্রায় কোনও কিছুর প্রয়োজন হতে পারে। ldgcc/g++/etcmakeLDFLAGS="whatever"
dave_thompson_085

11

স্থায়ীভাবে LD_LIBRARY_PATH এ নতুন পথ যুক্ত করার অন্য একটি উপায়:

.confফাইলটি সম্পাদনা করুন /etc/ld.so.conf.d/

আমি কখনও একটি অ্যাপ্লিকেশন ইনস্টল করেছি এবং এর লাইব্রেরিগুলি অন্য অ্যাপ্লিকেশন দ্বারা স্বীকৃত হতে পারে না। তারপর আমি পথ যোগ করুন, অর্থাত /usr/local/hdf5/libচাই, x86_64-linux-gnu.confফাইল। স্রেফ পরের লাইনে রেখে দিন। সংরক্ষণ করুন।

তারপরে দৌড়াও sudo ldconfig

এটা কাজ করেছে.

পিএস: ওএস উবুন্টু 14.04


4

তুমি তোমার এটা সেট করতে পারেন ~/.profileএবং / অথবা নির্দিষ্ট Init আপনার শেলের ফাইল (যেমন ~/.bashrcব্যাশ, জন্য ~/.zshenvzsh জন্য)। তারপরে আপনাকে নিজের শেলটি পুনরায় চালু করতে হবে (এবং সম্ভবত আপনার পছন্দ অনুসারে লগ আউট এবং আবার লগ ইন করুন)।

আপনি আপনার সেটিংস এর সাথে চেক করতে পারেন:

env | grep '^LD_LIBRARY_PATH'

সম্পাদনা: LD_LIBRARY_PATHভাগ করা লাইব্রেরিগুলির জন্য যা মেশিন কোড ধারণ করে, যার ফাইলের নামগুলি সাধারণত .soতাদের নামে থাকে, সম্ভবত বিভিন্ন সংস্করণ আলাদা করার জন্য পর্যায়ক্রমে পৃথক সংখ্যাগুলি অনুসরণ করে। এটি সম্ভব যে সত্ত্বেও LD_LIBRARY_PATH, এবিআইয়ের অমিলের কারণে একটি লাইব্রেরি পাওয়া যায় না। আরও লক্ষ করুন যে ভাষা (পার্ল এবং পাইথন এর মতো) এবং প্যাকেজগুলির নিজস্ব লাইব্রেরির সিস্টেম থাকতে পারে (সম্ভবত .soফাইলগুলির সাথেও ), এর সাথে সম্পর্কিত নয় LD_LIBRARY_PATH


আমার সংকলিত প্রোগ্রামটি আজও পাইথন লাইব্রেরিটি খুঁজে না পাওয়ার বিষয়ে অভিযোগ করেছে যদিও আমি এনভি | ব্যবহার করে সঠিক পথটি দেখছি গ্রেপ '^ এলডি_লিবারি_প্যাথ'। ঘটনাটি কী হতে পারে?
হারমান টুথ্রোট

@ হারমান টুথ্রোট আমি আমার উত্তর আপডেট করেছি। দ্রষ্টব্য যে পাইথনের নিজস্ব গ্রন্থাগার রয়েছে of আমার সন্দেহ হয় যে এটি ব্যবহার করে না LD_LIBRARY_PATH(সাধারণ লাইব্রেরির সাথে সংঘর্ষ এড়াতে)। আপনার ত্রুটি বার্তাটি পেয়ে এর জন্য আপনাকে একটি নির্দিষ্ট প্রশ্ন জিজ্ঞাসা করতে হবে।
ভিঙ্ক 17

3

সংকলনের সময় যদি আপনার লাইব্রেরির পাথ ত্রুটি লিঙ্কারে থাকে তবে আপনার লাইব্রেরিতে পাথটি ভেরিয়েবল $ LD_LIBRARY_PATH এ যুক্ত করতে হবে। লাইব্রেরির ত্রুটিটি যদি আপনি প্রকৃত সংকলিত প্রোগ্রামটি চালাচ্ছেন তবে আপনার /etc/ld.so.conf এ লাইব্রেরির পাথ যুক্ত করতে হবে এবং লাইব্রেরি অনুসন্ধানের পথের ক্যাশে পুনর্নির্মাণের জন্য ldconfig চালাতে হবে।


এই দুর্দান্ত কাজ! আমার কনফারেন্স ফাইলটি এই ডিরেক্টরিতে নির্দেশ করে /etc/ld.so.conf.d সুতরাং সেই ফোল্ডারে আপনার লিবসের পাথ সহ কেবল একটি ফাইল যুক্ত করুন। মূল হিসাবে ldconfig চালানো নিশ্চিত করুন (বা এটি sudo)
RLaaa

0

এর সাথে সমাধান:

মধ্যে যোগ /etc/systemd/system/pm2-node.service

Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/app/nodejs/local/nvm/versions/node/v7.8.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/node/.pm2
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Environment=OCI_LIB_DIR=/opt/oracle/instantclient_12_2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.