হোম ডিরেক্টরিতে স্থানীয়ভাবে একটি লাইব্রেরি ইনস্টল করা হচ্ছে, তবে প্রোগ্রাম এটি স্বীকৃতি দেয় না


10

আমি একটি সার্ভারে নন-রুট ব্যবহারকারী হিসাবে একটি প্রোগ্রাম ইনস্টল করছি। বিশেষত এটি tmux 1.5। তবে এটি আমার মতে স্থানীয়ভাবে ইনস্টল করা সমস্ত প্রোগ্রামের ক্ষেত্রে বিস্তৃতভাবে প্রয়োগ করা উচিত (এই সমস্যাটি আমার নিজের ত্রুটি না হওয়ার কারণে আমি প্রোগ্রামটির নাম উল্লেখ করি)।

প্রোগ্রামটির জন্য আমার কিছু নির্ভরশীল লাইব্রেরি ইনস্টল করা প্রয়োজন (উদাঃ উদ্ভট এবং ncurses)। সুতরাং, আমি উভয় স্থানীয়ভাবে ইনস্টল করেছি যেহেতু আমার কাছে রুট অ্যাক্সেস নেই

cd $HOME/library/installation/folder
DIR=$HOME/local
./configure --prefix=$DIR 
#... make ... make install 

এখন, প্রোগ্রামটি ইনস্টল করতে, আমাকে গ্রন্থাগার প্যাকেজগুলি অন্তর্ভুক্ত করতে হবে:

cd $HOME/program/installation/folder
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
#... make ... make install 

ঠিক আছে, সুতরাং এটি কোনও সমস্যা ছাড়াই প্রোগ্রামটি $ HOME / স্থানীয় / বিনে ইনস্টল করে, তবে আমি যদি এক্সিকিউটেবল চালনা করি: OME হোম / লোকাল / বিন / টিএমক্স, আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

tmux: ভাগ করা লাইব্রেরিগুলি লোড করার সময় ত্রুটি: লিভেন্ট -২.০.সো .৫: ভাগ করা বস্তু ফাইলটি খুলতে পারে না: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই

আমার কাছে মনে হবে যে প্রোগ্রামটি পছন্দসই লাইব্রেরিগুলি খুঁজে পাবে না, তবে কনফিগার বিকল্পগুলির মধ্যে উল্লিখিত libe হোম / লোকাল / লিবের মধ্যে লিভেন্ট -২.০.৩.৩ ফাইলটি প্রকৃতপক্ষে রয়েছে। আমি ভাবছি কীভাবে চালানোর জন্য আমি ইনস্টলড লাইব্রেরিটি সনাক্ত করতে প্রোগ্রামটি পেতে পারি। আমি $ হোম / লিবিব, $ হোম / বিন এবং $ হোম / স্থানীয় / বিনে প্রতীকী লিঙ্কগুলি রাখার চেষ্টা করেছি, কিন্তু এর কোনওটিই কাজ করে নি। কোনও ধারণা এবং প্রস্তাবিত প্রশংসা করা হবে


আমি অনুমান -R $DIR/libকরতে CFLAGSযখন ভবন tmux(এবং libevent)। এটি আমাকে সাহায্য করে না - জিসিসি থেকে কিছু চূড়ান্ত ত্রুটি হয়েছিল যা এটি সনাক্ত করতে পারে না -Rবলেও জানায় (এছাড়াও, আমি -Rএবং এর মধ্যে স্থান ছাড়াই চেষ্টা করেছি $DIR)। ./configure - অক্ষম-ভাগ করে নেওয়া এই কাজ করে, LD_LIBRARY_PATHএছাড়াও কাজ আপডেট করে । আমি libeventউপরের --disable-sharedবিকল্পটি দিয়ে আবার তৈরি শেষ করলাম ।

উত্তর:


20

ব্যবহার করে পুনর্নির্মাণের মুক্তির চেষ্টা করুন

./configure --disable-shared

আমি সন্দেহ করি এটি আপনার সমস্যার সমাধান করবে কারণ বাইনারি তৈরি করার সময় লাইব্রেরিটি লিঙ্কযুক্ত হবে এবং রানটাইম অনুসন্ধানের প্রয়োজন হবে না।

বিকল্পভাবে, আপনার যদি গতিশীলভাবে লিঙ্কযুক্ত মুক্তির প্রয়োজন হয়, আপনি আপনার এলডি_লিবিআরএআইএপিএইচটি পরিবেশ পরিবর্তনশীলটিতে লিভেন্ট -২.০.এস.ও. 5 যুক্ত ডিরেক্টরিটি যুক্ত করতে পারেন:

export LD_LIBRARY_PATH=${HOME}/local/lib/:${LD_LIBRARY_PATH}

বাহ, দ্রুত উত্তরের জন্য অনেক ধন্যবাদ। আমি সমস্যাটি সমাধানের জন্য LD_LIBRARY_PATH ব্যবহার করে শেষ করেছি যেহেতু আমি ভবিষ্যতের যে কোনও লাইব্রেরি ইনস্টলসে কেবল এই ফিক্সটি প্রয়োগ করতে পারি এবং সর্বদা $ হোম / স্থানীয় ডিরেক্টরি ব্যবহার করতে পারি। সাহায্যের প্রশংসা করুন!
স্কেলিকুলেটর 1


2

অন্যদের সাথে ভাগ্য নেই, তবে এটি এখান থেকে আমার জন্য কাজ করেছে :

sudo ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

2

আমি একটি অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি , আকর্ষণীয়ভাবে tmuxসমস্ত জিনিস তৈরির বিষয়েও যথেষ্ট (যদিও আমি এখনও নিশ্চিত যে এটি জিএনইউ configureএবং makeএকসাথে ব্যবহৃত হয় এমন কোনও অবস্থার সাথে সম্পর্কিত ।

আমি বিশ্বাস করি যে ক্লিনারটি তথাকথিত "আরপাথ" ব্যবহার করতে হবে - বাইনারিটিতে এম্বেড করা লাইব্রেরি অনুসন্ধানের পথ। -rpathঅন্তত গনুহ linker এর সুইচ ldপথ নির্দিষ্ট করে।

বিল্ড কমান্ড লাইনটি তখন নীচে দেখবে:

PKG_CONFIG_PATH=/path/to/libevent/lib/pkg-config LDFLAGS=-Wl,-rpath,/path/to/libevent/lib ./configure ...

সত্যিই এখানে প্যারামাউন্ট, কিন্তু না PKG_CONFIG_PATHউপরে কেবল মানুষ অন্যথায় পাঠানোর নিজে অর্জন না করার প্রস্তাবিত উপায় হল -L/path/to/libevent/lib -I/path/to/libevent/includeথেকে ./configureস্ক্রিপ্ট। আপনি যখন নির্মাণ করেন libevent, এটি এর জন্য নিজস্ব কনফিগারেশন ফাইলগুলি ইনস্টল করে pkg-config(যা ব্যবহার করে ./configure)। আপনার এটি ব্যবহার করা উচিত, কারণ এটির বিরুদ্ধে নির্মাণের সময় কী স্যুইচগুলি ব্যবহার করা উচিত তা কেবল libevent স্পষ্টভাবেই জানেন।

যাইহোক, কিছু পরিস্থিতিতে -rpathসমস্যা সমাধানের জন্য একটি ক্লিনার পদ্ধতি।

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

আশ্চর্যের বিষয় হ'ল কেন tmux'নিজের বিল্ড স্ক্রিপ্টগুলি বিল্ডিংয়ের সময় লাইব্রেরি অনুসন্ধানের পথ থেকে এই পথটিকে অনুমান করে না। হয়তো তাদের দরকার নেই এবং করা উচিত নয়, আমি জানি না। এটা কি কাকতালীয় ঘটনা যা আমাদের তৈরি হয়েছে tmux?

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