এল ক্যাপ্টেন, চেক করুন, ডিওয়াইএলডি_লিবারি_প্যাথ


9

আমি সাধারণ ইউনিক্স সরঞ্জাম সেট ব্যবহার করে অ্যাপ্লিকেশনগুলি বিকাশ করি: একটি সংকলক make, এবং ভাগ করা লাইব্রেরি। পদ্ধতিটি হ'ল traditionতিহ্যগতভাবে কিছু something

  • ./configure, যা চালিত মেশিনের বৈশিষ্ট্যগুলির জন্য উত্সগুলি উপযুক্ত করে তোলে,
  • make, যা আসলে ভাগ করা libs, এক্সিকিউটেবল, ইত্যাদি সংকলন করে,
  • make check, যা প্যাকেজ ইনস্টল করার আগে পরীক্ষা চালায় ,
  • make install, যদি প্যাকেজটি সঠিকভাবে আচরণ করে এবং শেষ পর্যন্ত ,চ্ছিকভাবে,
  • make installcheck, ইনস্টলেশন কাজ করে তা নিশ্চিত করার জন্য।

সময়কালে make, ভাগ করা libs এবং এক্সিকিউটেবলগুলি তাদের চূড়ান্ত আকারে সংকলিত হয়: এক্সিকিউটেবলগুলি তাদের চূড়ান্ত গন্তব্যস্থলে ভাগ করা libs এর উপর নির্ভরতার সাথে সংকলিত হয় (যেমন, তারা গ্রন্থাগারের উপর নির্ভর করে /usr/local/libযদিও তারা এখনও সেখানে নেই, তারা এখনও বিল্ডে রয়েছে গাছ)। তারপরে make install, মোটামুটিভাবে, cpবিল্ড ট্রি থেকে চূড়ান্ত স্থানে libs এবং এক্সিকিউটেবল ইনস্টল করতে ব্যবহার করছি।

make checkপর্যায়ে চলাকালীন , আমরা প্রোগ্রামটি আনইনস্টল করে চলছি: ভাগ করা libs, এক্সিকিউটেবল এবং সহায়ক ফাইলগুলি এখনও বিল্ড ট্রিতে রয়েছে। পরীক্ষা চালানোর জন্য আপনাকে কয়েকটি কাস্টম এনভায়রনমেন্ট ভেরিয়েবল সেট করতে হবে (উদাহরণস্বরূপ আপনার প্রোগ্রামটি জানানোর জন্য যে আপনার সহায়ক ডেটা ফাইলগুলি /usr/local/shareসোর্স ট্রিতে নেই) এবং কিছু সিস্টেম এনভায়রনমেন্ট ভেরিয়েবল, আপনার শেয়ার লিব লোডারকে দেখতে ভাগ libs জন্য। Traditionalতিহ্যবাহী ইউনিসে পরিবেশের পরিবর্তনশীলগুলি LD_LIBRARY_PATHওএস এক্সে রয়েছে DYLD_LIBRARY_PATH। এটি কয়েক বছর ধরে কাজ করেছে।

তবে এখন, এল ক্যাপিটান এটি ভেঙে দিয়েছে।

$ (export FOO=foo; env) | grep foo
FOO=foo
$ (export DYLDFOO=foo; env) | grep foo
DYLDFOO=foo
$ (export DYLD_FOO=foo; env) | grep foo
$

এখন, এসআইপি সক্ষম DYLD_*থাকা অবস্থায় কোনও প্রক্রিয়া থেকে তার বাচ্চাদের রফতানি করা হয় না।

সুতরাং আমার প্রশ্নটি: আমরা কীভাবে ইনস্টল না থাকা প্রোগ্রামগুলি চালাতে পারি? Traditionalতিহ্যবাহী ইউনিক্স সিকোয়েন্স চালাতে সক্ষম হতে অনুসরণ করার পদ্ধতিটি কী ./configure && make && make check?

দয়া করে , " make installপ্রথম চালান" এর মতো কোনও উত্তর নেই । ঐটা আসল কথা না. আমি একজন বিকাশকারী এবং "মেক চেক" চালাচ্ছি (এবং আরও সাধারণভাবে কোনও প্রোগ্রামের একটি ইনস্টল করা সংস্করণটি চালানো হয় না) যা আমি খুব ঘন ঘন করি। এমনকি একটি ডামি জায়গায় ইনস্টল করা সময় সাপেক্ষ। আমার কার্যকর দক্ষ কিছু দরকার । এবং এসআইপি নিষ্ক্রিয় করা আমার প্যাকেজগুলির যে ব্যবহারকারীরা চালাতে চান তাদের সমস্যা সমাধান করবে না make check


আমি এখনও DYLD_INSERT_LIBRARIES=$HOME/.bin/lib/Apple80211 /Applications/Utilities/AirPort\ Utility\ 5.6.app/Contents/MacOS/AirPort\ Utility\ 5.610.11 এর অধীনে (পুরানো লাইব্রেরি সহ) পুরানো এপিইউ চালাতে ব্যবহার করতে পারি (যদিও ভেরিয়েবলটি প্রদর্শিত না হয় env)। অদ্ভুত (তবে এটি কাজ করে)।
nohillside

উত্তর:


6

দেখে মনে হচ্ছে ডিওয়াইএলডি_ * কেবল "সুরক্ষিত" বাইনারিগুলির জন্য ছড়িয়ে পড়েছে (এর ঠিক অর্থ কী তা আমি নিশ্চিত নই, তবে দৃশ্যত / বিন এবং / ইউএস / বিনের শুরুতে কিছু আছে) তবে, আপনি যদি / ইউএসআর / বিন / এনভিভি অনুলিপি করেন অন্য কোথাও, এটি তার ডিওয়াইএলডি_ * স্টাফ রাখবে:

$ cp /usr/bin/env ~/Desktop; (DYLD_FOO=bar ~/Desktop/env)|grep DY
dyld: warning, unknown environment variable: DYLD_FOO
DYLD_FOO=bar

আমি মনে করি সর্বদা / বিন / শ মাধ্যমে কমান্ড চালায়, সুতরাং আপনি মেকফাইলে "বিপজ্জনক" ভেরিয়েবলগুলি সেট করতে পারবেন না এবং সেগুলি কমান্ডগুলিকে প্রভাবিত করতে পারবেন না, তবে সম্ভবত আপনি পরীক্ষাটি শেল স্ক্রিপ্টে স্থানান্তর করতে পারেন, পরিবেশের ভেরিয়েবলগুলি অভ্যন্তরের অভ্যন্তরে সেট করতে পারেন maybe স্ক্রিপ্ট, এবং তারপরে স্ক্রিপ্টটিকে অনুরোধ করুন। যদিও স্পষ্টত, তাহলে এটি আপনাকে সাহায্য করবে না যদি পরীক্ষা, ঘুরে, শেল স্ক্রিপ্ট উপর নির্ভর (বা যদি জিনিষ পরীক্ষিত হয় শেল স্ক্রিপ্ট!) কারণ তারপর তারা ডাকা / বিন / SH এবং ভেরিয়েবল আবার হারাতে যাচ্ছেন .. ।


অনেক ধন্যবাদ! এখন আমি এটি করতে পারি cp /bin/shএবং আসলটির পরিবর্তে সেই শেলটি ব্যবহার করতে পারি। সিমলিংকগুলি করবে না, এবং কঠোর লিঙ্কগুলি "অপারেশনগুলির অনুমতি নেই", তাই আমার ধারণা আমার সাথে থাকতে হবে cp
আকিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.