উত্স থেকে জিনিসগুলি সংকলন শেখা (ইউনিক্স / লিনাক্স / ওএসএক্স)


47

আমি যেখানে প্যাকেজগুলি (ম্যাকপোর্টস / এপটি-গেট) থেকে সফ্টওয়্যার ইনস্টল করি যখনই সম্ভব হয়, আমি প্রায়শই নিজেকে উত্স থেকে প্যাকেজগুলি সংকলন করার প্রয়োজন মনে করি। ./configure && make && sudo make installসাধারণত পর্যাপ্ত, তবে কখনও কখনও এটি কাজ করে না - এবং যখন এটি হয় না, আমি প্রায়শই আটকে যাই। এটি প্রায়শই কোনওভাবে অন্য লাইব্রেরি নির্ভরতাগুলির সাথে সম্পর্কিত।

আমি নিম্নলিখিত শিখতে চাই:

  • কীভাবে যুক্তি দিতে হবে তা আমি কীভাবে বুঝব ./configure?
  • ওএস এক্স / লিনাক্সের আওতায় ভাগ করা লাইব্রেরিগুলি কীভাবে কাজ করে - যেখানে তারা ফাইল সিস্টেমে বাস করে, কীভাবে ./configure && makeতাদের সন্ধান করে, যখন তারা এর সাথে যুক্ত হয় তখন আসলে কী ঘটে
  • একটি ভাগ করা এবং একটি স্ট্যাটিকালি লিঙ্কড লাইব্রেরির মধ্যে আসল পার্থক্যগুলি কী? আমি কেন স্থিরভাবে সমস্ত কিছু সংযুক্ত করতে পারি না (এই দিনগুলিতে র‌্যাম এবং ডিস্কের জায়গা কম সস্তা) এবং তাই অদ্ভুত গ্রন্থাগারের সংস্করণ বিরোধগুলি এড়াতে পারি?
  • আমি কীভাবে বলতে পারি যে আমি কোন লাইব্রেরি ইনস্টল করেছি এবং কোন সংস্করণগুলি?
  • আমার স্বাভাবিক সিস্টেমটি না ভেঙে আমি কীভাবে একটি লাইব্রেরির একাধিক সংস্করণ ইনস্টল করতে পারি?
  • আমি যদি এমন কোনও সিস্টেমে উত্স থেকে জিনিসগুলি ইনস্টল করছি যা অন্যথায় প্যাকেজগুলি ব্যবহার করে পরিচালিত হয়, তবে এটি করার সর্বোত্তম উপায় কী?
  • ধরে নিচ্ছি যে আমি উত্স থেকে বেআইনিভাবে কিছু সংকলন পরিচালনা করেছি, তবে আমি কীভাবে প্যাকেজ করতে পারি যাতে অন্য লোকদের একই হুপ থেকে ঝাঁপিয়ে না পড়তে হয়? বিশেষত ওএস এক্সে ....
  • এই জিনিসটি ভাল করার জন্য আমার কমান্ড লাইন সরঞ্জামগুলি কী দরকার? স্টাড যেমন ওটুল, পিকেজি-কনফিগার ইত্যাদি

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

উত্তর:


40

আমি প্রত্যক্ষভাবে প্রত্যুত্তর দেওয়ার জন্য ক্ষমাপ্রার্থী, তবে আমি কোনও কার্যকর টিউটোরিয়াল, এফএকিউ ইত্যাদি জানি না মূলত এরপরে হ'ল ডেস্কটপ অ্যাপ্লিকেশন তৈরি করার 8 বছর (যা আমি বিতরণ করতে সহায়তা করি), হতাশা এবং গুগলিং:

। / কনফিগারে কোন যুক্তিগুলি পাস করতে হবে তা আমি কীভাবে আবিষ্কার করব?

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

নির্ভরতাগুলির জন্য কনফিগার এবং জিএনইউ সরঞ্জামগুলি সমস্ত /, / usr এবং / usr / স্থানীয় অনুসন্ধান করে। যদি আপনি অন্য কোথাও ইনস্টল করেন (যা ম্যাকপোর্টস বা ফিংক দ্বারা নির্ভরতা ইনস্টল করা থাকলে জিনিসগুলি বেদনাদায়ক করে তোলে), আপনাকে জিএনইউ সরঞ্জামগুলি এই নির্ভরতাগুলি খুঁজে পেতে সহায়তা করার জন্য শেলের পরিবেশ কনফিগার করতে বা পরিবর্তন করতে একটি পতাকা দিতে হবে।

২. ওএস এক্স / লিনাক্সের আওতায় ভাগ করা লাইব্রেরিগুলি কীভাবে কাজ করে - যেখানে তারা ফাইল সিস্টেমে বাস করে, কীভাবে। / কনফিগার করে & তাদের এটি সন্ধান করে, যখন তারা এর সাথে যুক্ত হয় তখন আসলে কী ঘটে

লিনাক্সে তাদের এমন একটি পথে ইনস্টল করা প্রয়োজন যা ডায়নামিক লিঙ্কার সন্ধান করতে পারে, এটি LD_LIBRARY_PATHপরিবেশের পরিবর্তনশীল এবং /etc/ld.conf এর বিষয়বস্তু দ্বারা সংজ্ঞায়িত করা হয়েছে । ম্যাকে এটি প্রায়শই সর্বদা ওপেন সোর্স সফ্টওয়্যারগুলির জন্য সমান (এটি যদি কোনও এক্সকোড প্রকল্প না হয়)। Env পরিবর্তনশীল বাদে এর DYLD_LIBRARY_PATHপরিবর্তে হয়।

একটি ডিফল্ট পাথ রয়েছে যা লিঙ্কার লাইব্রেরির জন্য অনুসন্ধান করে। এটি / লিবিব: / ইউএসআর / লিবিব: / ইউএসআর / লোকাল / লাইব

আপনি সিপিএটিএইচ ভেরিয়েবল, বা সিএফএলএগএস বা অন্যান্য যে কোনও পরিবেশের ভেরিয়েবল (সুবিধাজনকভাবে জটিল) ব্যবহার করে এটি পরিপূরক করতে পারেন। আমি সিএফএলএজিএস এর মত পরামর্শ দিচ্ছি:

CFLAGS = "$ CFLAGS -L / new / पथ" রফতানি করুন

-L পরামিতি লিঙ্ক পাথটিতে যুক্ত করে।

আধুনিক স্টাফগুলি পিকেজি-কনফিগার সরঞ্জামটি ব্যবহার করে। আপনি যে আধুনিক জিনিসগুলি ইনস্টল করেন সেগুলি একটি .pc ফাইলও ইনস্টল করে যা গ্রন্থাগারটি কোথায় এবং এটি কীভাবে লিঙ্ক করবেন তা বর্ণনা করে describes এটি জীবনকে আরও সহজ করে তুলতে পারে। তবে এটি ওএস এক্স 10.5 এর সাথে আসে না তাই আপনাকে এটিও ইনস্টল করতে হবে। এছাড়াও প্রচুর বেসিক ডিপগুলি এটি সমর্থন করে না।

লিঙ্কিংয়ের কাজটি কেবল "রানটাইমের সময় এই ফাংশনটি সমাধান করুন", এটি সত্যিই একটি বড় স্ট্রিং টেবিল।

৩. একটি ভাগ করা এবং স্ট্যাটিকালি লিঙ্কড লাইব্রেরির মধ্যে আসল পার্থক্যগুলি কী কী? আমি কেন স্থিরভাবে সমস্ত কিছু সংযুক্ত করতে পারি না (এই দিনগুলিতে র‌্যাম এবং ডিস্কের জায়গা কম সস্তা) এবং তাই অদ্ভুত গ্রন্থাগারের সংস্করণ বিরোধগুলি এড়াতে পারি?

আপনি যখন একটি স্ট্যাটিক লাইব্রেরি ফাইলের সাথে লিঙ্ক করেন তখন কোডটি আপনার আবেদনের অংশ হয়ে যায়। এটির মতো হবে যদি সেই লাইব্রেরির জন্য একটি বিস্তৃত .c ফাইল থাকে এবং আপনি এটি আপনার অ্যাপ্লিকেশনটিতে সংকলন করেন।

ডায়নামিক লাইব্রেরিতে একই কোড থাকে তবে অ্যাপটি চলাকালীন কোডটি রানটাইমের সময় অ্যাপটিতে লোড করা হয় (সরল ব্যাখ্যা)।

আপনি স্থিরভাবে সমস্ত কিছুর সাথে লিঙ্ক করতে পারেন, তবে দুঃখের বিষয় হ'ল কোনও বিল্ড সিস্টেম এটিকে সহজ করে না। আপনাকে ম্যানুয়ালি বিল্ড সিস্টেম ফাইলগুলি সম্পাদনা করতে হবে (উদাঃ Makefile.am, বা CMakeLists.txt)। তবে আপনি যদি নিয়মিতভাবে এমন কিছু ইনস্টল করেন যা লাইব্রেরির বিভিন্ন সংস্করণের প্রয়োজন হয় এবং আপনি সমান্তরালভাবে নির্ভরতা ইনস্টল করতে খুঁজে পান তবে এটি সম্ভবত শেখার উপযুক্ত।

কৌশলটি হ'ল লিঙ্ক লাইনটি-ফ্লু থেকে -l / পাথ / থেকে / স্থিতিশীল / foo.a এ পরিবর্তন করা

আপনি সম্ভবত খুঁজে পেতে এবং প্রতিস্থাপন করতে পারেন। এরপরে পরীক্ষা করুন যে সরঞ্জামটি এলডিডি ফু বা ওতুল-ল ফু ব্যবহার করে .so বা dylib এর সাথে লিঙ্ক করে না

অন্য সমস্যা হ'ল সমস্ত লাইব্রেরি স্থির গ্রন্থাগারগুলিতে সংকলিত হয় না। অনেকেই করেন। তবে ম্যাকপোর্টস বা ডেবিয়ান সম্ভবত এটি শিপ না করার সিদ্ধান্ত নিয়েছে।

৪. আমি কীভাবে লাইব্রেরি ইনস্টল করেছি এবং কোন সংস্করণগুলি বলতে পারি?

আপনার যদি সেই লাইব্রেরির জন্য pkg-config ফাইল থাকে তবে এটি সহজ:

pkg-config --list-all

অন্যথায় আপনি প্রায়শই সহজেই পারেন না। ডাইলিবের একটি সোনাম থাকতে পারে (যেমন। Foo.0.1.dlib, সোনামটি 0.1) যা গ্রন্থাগারের সংস্করণ হিসাবে একই। তবে এটি প্রয়োজন হয় না। সোনাম একটি বাইনারি কম্পিউটারের বৈশিষ্ট্য, আপনি লাইব্রেরির ফাংশনগুলির ফর্ম্যাটটি পরিবর্তন করলে সোনমের প্রধান অংশটি আপনাকে ধাক্কা দিতে হবে। সুতরাং আপনি যেমন পেতে পারেন। 2.0 লাইব্রেরির জন্য 14.0.5 সংস্করণ সংস্করণ। যদিও এটি সাধারণ নয়।

আমি এই ধরণের জিনিসটি নিয়ে হতাশ হয়ে পড়েছি এবং ম্যাকের জন্য এর জন্য একটি সমাধান তৈরি করেছি এবং আমি এরপরেই এটি সম্পর্কে কথা বলছি।

৫. আমি কীভাবে আমার স্বাভাবিক সিস্টেমটি না ভেঙে লাইব্রেরির একাধিক সংস্করণ ইনস্টল করতে পারি?

এর আমার সমাধানটি এখানে: http://github.com/mxcl/homebrew/

আমি উত্স থেকে ইনস্টল করতে চাই এবং একটি সরঞ্জাম চাই যা এটিকে সহজ করে তুলল, তবে কিছু প্যাকেজ ব্যবস্থাপনার মাধ্যমে। তাই হোমব্রু দিয়ে আমি যেমন নির্মাণ করি। উত্স থেকে নিজেকে উইজেট করুন, তবে একটি বিশেষ উপসর্গে ইনস্টল করতে ভুলবেন না:

/usr/local/Cellar/wget/1.1.4

তারপরে আমি হোমব্রেইউ সরঞ্জামটি সমস্ত / ইউএসআর / লোকালতে সিমিলিংক করতে ব্যবহার করি, তাই আমার কাছে এখনও / ইউএসআর / লোকাল / বিন / উইজেট এবং / ইউএসআর / লোকাল / লিবি / লিবিউজেট.ডিলিব রয়েছে

পরে আমার যদি উইজেটের আলাদা সংস্করণ প্রয়োজন তবে আমি এটি সমান্তরালভাবে ইনস্টল করতে পারি এবং কেবলমাত্র / ইউএসআর / স্থানীয় গাছের সাথে সংযুক্ত সংস্করণটি পরিবর্তন করতে পারি।

I. আমি যদি এমন কোনও সিস্টেমে উত্স থেকে স্টাফ ইনস্টল করছি যা অন্যথায় প্যাকেজগুলি ব্যবহার করে পরিচালিত হয়, তবে এটি করার সহজ উপায় কী?

আমি বিশ্বাস করি হোমব্রু পথটি সবচেয়ে পরিষ্কার, সুতরাং এটি ব্যবহার করুন বা সমতুল্য করুন। / Usr / স্থানীয় / pkgs / নাম / সংস্করণে ইনস্টল করুন এবং বাকীটিতে সিমিলিংক বা হার্ড লিঙ্ক।

স্থানীয় / ইউএসআর / ব্যবহার করুন। প্রতিটি বিল্ড টুল যা বিদ্যমান সেখানে নির্ভরতা এবং শিরোনামগুলির জন্য অনুসন্ধান করে। আপনার জীবন অনেক সহজ হবে।

Ass. ধরে নিচ্ছি যে উত্স থেকে আমি কিছু সংক্ষেপে পরিচালনা করতে পেলাম, তখন আমি কীভাবে প্যাকেজ করতে পারি যাতে অন্য লোকদের একই হুপের মধ্য দিয়ে যেতে হয় না? বিশেষত ওএস এক্সে ....

যদি এর কোনও নির্ভরতা না থাকে তবে আপনি বিল্ড ডিরেক্টরিটি আপ করতে পারেন এবং এটি "মেক ইনস্টল" করতে পারে এমন অন্য কাউকে দিতে পারেন। তবে আপনি এটি কেবল ওএস এক্সের একই একই সংস্করণগুলির জন্য নির্ভরযোগ্যভাবে করতে পারেন Linux লিনাক্সে এটি সম্ভবত একই কার্নেল সংস্করণ এবং libc গৌণ সংস্করণ সহ অনুরূপ লিনাক্সের (যেমন। উবুন্টু) কাজ করবে।

বাইনারি সামঞ্জস্যের কারণে ইউনিক্সে বাইনারি বিতরণ করা সহজ নয় কারণ। জিএনইউ লোকেরা এবং অন্য প্রত্যেকে প্রায়শই তাদের বাইনারি ইন্টারফেসগুলি পরিবর্তন করে।

মূলত বাইনারি বিতরণ করবেন না। জিনিসগুলি সম্ভবত খুব অদ্ভুত উপায়ে ভাঙবে।

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

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

হোমব্রিউয়ের সাথে আমার ভবিষ্যতের লক্ষ্যগুলির মধ্যে একটি হ'ল কোনও ওয়েবসাইটের কোনও লিঙ্কে ক্লিক করা সম্ভব করা (উদাহরণস্বরূপ হোমব্রু: // ব্লাহ এবং এটি সেই রুবি স্ক্রিপ্টটি ডাউনলোড করবে, সেই প্যাকেজের জন্য ডিপগুলি ইনস্টল করবে এবং তারপরে অ্যাপটি তৈরি করবে But তবে হ্যাঁ, এখনও করা হয়নি, তবে আমি যে নকশাকে বেছে নিয়েছি তা বিবেচনা করে খুব জটিল নয়।

৮. এই জিনিসটি ভাল করার জন্য আমার যে কমান্ড লাইন সরঞ্জামগুলির মাস্টার দরকার তা কী? স্টাড যেমন ওটুল, পিকেজি-কনফিগার ইত্যাদি

অতুল সত্যিকারের পরে কেবল কার্যকর। এটি আপনাকে জানায় যে অন্তর্নির্মিত বাইনারিগুলির সাথে কী লিঙ্ক রয়েছে। আপনি যখন কোনও সরঞ্জাম তৈরি করতে হবে তার নির্ভরতাগুলি নির্ধারণ করার সময় এটি অকেজো। Pkg-config এর ক্ষেত্রেও এটি একই রকম কারণ আপনি এটি ব্যবহারের আগে আপনি ইতিমধ্যে নির্ভরতা ইনস্টল করে রেখেছেন।

আমার সরঞ্জাম চেইনটি হল, README এবং ইনস্টল করা ফাইলগুলি পড়ুন এবং একটি কনফিগার করুন - সহায়তা করুন। বিল্ড আউটপুট এটি বুদ্ধিমান তা পরীক্ষা করতে দেখুন। যে কোনও বিল্ড ত্রুটি পার্স করুন। ভবিষ্যতে হয়তো সার্ভারফল্টে জিজ্ঞাসা করুন :)


2
আকর্ষণীয়, হোমব্রিউ দেখতে অনেকটা পোর্টেজের মতো (জেন্টু লিনাক্সের প্যাকেজ ম্যানেজার)। কাজের মতো সুন্দর লাগছে like
ডেভিড জেড

12

এটি একটি বিশাল বিষয় তাই লিনাক্সে ভাগ করা গ্রন্থাগারগুলি দিয়ে শুরু করা যাক (লিনাক্সে ইএলএফ এবং ওএস এক্স-এ ম্যাক-ও), উলরিচ ড্রিপারের ডিএসও (ডায়নামিক শেয়ার্ড অবজেক্টস) লেখার জন্য একটি ভাল ভূমিকা রয়েছে যা লিনাক্সে ভাগ করা লাইব্রেরিগুলির কয়েকটি ইতিহাস উপলব্ধ রয়েছে কেন তারা গুরুত্বপূর্ণ তা সহ এখানে

অলরিচ আরও বর্ণনা করেছেন যে স্থির লিঙ্ককে কেন এখানে মূল পয়েন্টগুলির মধ্যে অন্যতম ক্ষতিকারক হিসাবে বিবেচনা করা হয় তা হল সুরক্ষা আপডেট। একটি সাধারণ লাইব্রেরিতে বাফার ওভারফ্লোগুলি (উদাহরণস্বরূপ zlib) যেগুলি স্ট্যাটিকালিভাবে সংযুক্ত থাকে তা বিতরণের জন্য একটি বিশাল ওভারহেডের কারণ হতে পারে - এটি zlib 1.1.3 ( রেড হ্যাট পরামর্শদাতা ) এর সাথে সংঘটিত হয়েছে

ELF

লিঙ্কার ld.so ম্যানুয়াল পৃষ্ঠা

man ld.so 

রানটাইম ডায়নামিক লিঙ্কিংয়ের সাথে জড়িত মূল পাথ এবং ফাইলগুলি ব্যাখ্যা করে। আধুনিক লিনাক্স সিস্টেমে আপনি /etc/ld.so.conf.d/ এর মাধ্যমে যুক্ত অতিরিক্ত পথ দেখতে পাবেন যা সাধারণত একটি গ্লোব মাধ্যমে যুক্ত হয় /etc/ld.so.conf অন্তর্ভুক্ত।

আপনি যদি ld.so কনফিগারেশনের মাধ্যমে ডায়নামিকভাবে উপলভ্য তা দেখতে চান তবে আপনি চালনা করতে পারেন

ldconfig -v -N -X

ডিএসও কীভাবে পড়তে হবে তা ওএস এক্স-এর মাচ-ও-তে কীভাবে নীতিগুলি প্রয়োগ করে তা বুঝতে যাতে আপনাকে একটি ভাল প্রাথমিক স্তরের জ্ঞান দেওয়া উচিত understand

মাপক-হে

ওএস এক্স-এ বাইনারি ফর্ম্যাটটি মাচ-ও- লিঙ্কারের জন্য স্থানীয় সিস্টেমের ডকুমেন্টেশন

man dyld

মাপক বিন্যাস ডকুমেন্টেশন অ্যাপল থেকে পাওয়া যায়

ইউনিক্স বিল্ড সরঞ্জাম

সাধারণ configure, make, make installপ্রক্রিয়া সাধারণত গনুহ autotools যা হয়েছে দ্বারা প্রদান করা হয় অনলাইন বই যে কভার কনফিগার / বিল্ড বিভক্ত এবং গনুহ টুলচেইন ইতিহাসে কিছু। অটোকনফ লক্ষ্য নির্ধারণের সিস্টেমে বৈশিষ্ট্যটির প্রাপ্যতা নির্ধারণ করতে পরীক্ষাগুলি ব্যবহার করে, এটি চালানোর জন্য এটি এম 4 ম্যাক্রো ভাষা ব্যবহার করে । অটোমাকে মূলত মেকফিলের জন্য একটি টেম্প্লেটিং পদ্ধতি, টেমপ্লেটটি সাধারণত মেকফিল.এম বলা হয় যা একটি মেকফিল.ইনকে আউটপুট দেয় যে অটোকনফের আউটপুট (কনফিগার স্ক্রিপ্ট) একটি মেকফাইলে রূপান্তর করে।

গনুহ হ্যালো প্রোগ্রাম গনুহ টুলচেইন বোঝার জন্য একটি ভাল উদাহরণ হিসাবে কাজ করে - এবং ম্যানুয়াল autotools ডকুমেন্টেশন অন্তর্ভুক্ত করা হয়েছে।


10

সিমন! আমি জানি তুমি কেমন অনুভব করছো; আমি লিনাক্স শেখার এই অংশটি নিয়েও লড়াই করেছি। আমার নিজের অভিজ্ঞতার উপর ভিত্তি করে, আমি কিছু আইটেম আপনি সুরাহা কয়েকটির বিষয়ে একটি টিউটোরিয়াল লিখেছেন (বেশিরভাগই নিজের জন্য একটি রেফারেন্স হিসেবে!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html । আমি মনে করি আপনি পাইথন অ্যাপ্লিকেশনগুলি কীভাবে তৈরি / ইনস্টল করতে পারবেন তা সহজ note :)

আশা করি এটি সাহায্য করে! এবং শুভ সংকলন।

টিম জোনস


উবুন্টু লিনাক্সের উত্স থেকে অ্যাপ্লিকেশন তৈরি / ইনস্টল করা

উবুন্টু সংগ্রহস্থলগুলি দুর্দান্ত অ্যাপ্লিকেশনগুলিতে পূর্ণ হয়ে উঠেছে, এক সময় বা অন্য কোনও সময় আপনি সেই "আবশ্যক" সরঞ্জামটি অতিক্রম করতে বাধ্য হন যা সংগ্রহস্থলগুলিতে নেই (বা একটি ডেবিয়ান প্যাকেজ নেই) বা আপনার প্রয়োজন সংগ্রহস্থলের তুলনায় নতুন সংস্করণ। আপনি কি করেন? ঠিক আছে, আপনাকে উত্স থেকে অ্যাপ্লিকেশনটি তৈরি করতে হবে! চিন্তা করবেন না, এটি যতটা শোনাচ্ছে তেমন জটিল নয়। র‌্যাঙ্ক অপেশাদার হতে যাওয়া সম্পর্কে আমার অভিজ্ঞতার ভিত্তিতে এখানে কয়েকটি টিপস দেওয়া হল! (এই উদাহরণের জন্য আমি উবুন্টুটি ব্যবহার করার সময়, সাধারণ ধারণাটি ইউনিক্স / লিনাক্সের যে কোনও বিতরণ যেমন ফেডোরা এবং এমনকি উইন্ডোজের সাইগউইন প্ল্যাটফর্মের ক্ষেত্রে প্রযোজ্য))

উত্স থেকে বেশিরভাগ অ্যাপ্লিকেশন তৈরি করার (সংকলন) করার প্রাথমিক প্রক্রিয়াটি এই ক্রমটি অনুসরণ করে: কনফিগার করুন -> সংকলন -> ইনস্টল করুন। এই জিনিসগুলি করার জন্য সাধারণ ইউনিক্স / লিনাক্স আদেশগুলি হ'ল: config-> make-> make install। কিছু ক্ষেত্রে, আপনি এমন ওয়েব পৃষ্ঠাগুলিও খুঁজে পাবেন যা দেখায় যে এই সমস্তগুলি একটি একক কমান্ডের সাথে সংযুক্ত করা যেতে পারে:

$ config && make && make install

অবশ্যই, এই আদেশটি অনুমান করে যে এই পদক্ষেপগুলির কোনওর মধ্যে কোনও সমস্যা নেই। এখানেই মজা আসে!

শুরু হচ্ছে

আপনি যদি আপনার সিস্টেমে উত্স থেকে কোনও অ্যাপ্লিকেশন সঙ্কলিত না করে থাকেন তবে আপনাকে সম্ভবত এটি সাধারণ বিকাশের কিছু সরঞ্জাম যেমন gccসংকলক স্যুট, কিছু সাধারণ হেডার ফাইল (এটি ইতিমধ্যে লিখিত হয়েছে এমন কোড হিসাবে ভাবেন) দিয়ে সেটআপ করতে হবে will আপনি ইনস্টল করা প্রোগ্রাম) এবং মেক টুল দ্বারা ব্যবহৃত অন্য কারও দ্বারা। ভাগ্যক্রমে, উবুন্টুতে একটি মেটাপ্যাকেজ রয়েছে যা build-essentialএটি ইনস্টল করবে। এটি ইনস্টল করতে (বা কেবল আপনার ইতিমধ্যে এটি নিশ্চিত হয়ে গেছে!), টার্মিনালে এই কমান্ডটি চালান:

$ sudo apt-get install build-essential

এখন আপনার কাছে বেসিক সেটআপ রয়েছে, অ্যাপ্লিকেশন উত্স ফাইলগুলি ডাউনলোড করুন এবং সেগুলি আপনার ডিরেক্টরিতে "হোম" ডিরেক্টরি হিসাবে পড়া / লেখার অনুমতি রয়েছে এমন একটি ডিরেক্টরিতে সংরক্ষণ করুন। সাধারণত, এগুলি কোনও .tar.gzবা ফাইলের এক্সটেনশন সহ একটি সংরক্ষণাগার ফাইলে থাকবে .tar.bz2। এর .tarসহজ অর্থ হল এটি একটি "টেপ সংরক্ষণাগার", যা ফাইলগুলির একটি গ্রুপিং যা তাদের সম্পর্কিত ডিরেক্টরি কাঠামো সংরক্ষণ করে। .gzGzip, (গনুহ জিপ), যা একটি জনপ্রিয় ইউনিক্স / লিনাক্স কম্প্রেশন ফরম্যাট ঘোরা। একইভাবে, .bz2bzip2, যা একটি নতুন সংক্ষেপণ বিন্যাস যা gzip এর চেয়ে উচ্চতর সংক্ষেপণ (ছোট সংকোচিত ফাইলের আকার) সরবরাহ করে।

উত্স ফাইলটি ডাউনলোড করার পরে, একটি টার্মিনাল উইন্ডো খুলুন (উবুন্টু মেনু থেকে সিস্টেম টার্মিনাল) এবং আপনি যে ডিরেক্টরিটি আপনার ফাইলটি সংরক্ষণ করেছেন সেখানে পরিবর্তন করুন। (আমি ~/downloadএই উদাহরণটি ব্যবহার করব Here এখানে '~' আপনার "হোম" ডিরেক্টরিতে একটি শর্টকাট)) ডাউনলোড করা সংরক্ষণাগার ফাইল থেকে ফাইলগুলি বের করার জন্য টার কমান্ডটি ব্যবহার করুন:

যদি আপনার ফাইলটি একটি জিজিপ সংরক্ষণাগার (উদাহরণস্বরূপ শেষ হয় .tar.gz) হয়, কমান্ডটি ব্যবহার করুন:

            $ tar -zxvf filename.tar.gz

যদি আপনার ফাইলটি bzip2 সংরক্ষণাগার (উদাহরণস্বরূপ শেষ হয় .tar.bz2) হয়, কমান্ডটি ব্যবহার করুন:

            $ tar -jxvf filename.tar.gz

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

উত্স থেকে তৈরি করার সময়, দুটি সাধারণ ধরণের ত্রুটি রয়েছে যা আপনার মুখোমুখি হতে পারে:

  1. আপনার সেটআপের সাথে সুনির্দিষ্ট একটি মেকফিল তৈরি করতে আপনি যখন কনফিগারেশন স্ক্রিপ্টটি (সাধারণত নামযুক্ত কনফিগারেশন বা কনফিগার করা) চালিত হন তখন কনফিগারেশন ত্রুটিগুলি ঘটে।
  2. সংকলক ত্রুটিগুলি ঘটে যখন আপনি মেক কমান্ডটি চালান (মেকফিল উত্পন্ন হওয়ার পরে) এবং সংকলকটির প্রয়োজনীয় কিছু কোড সন্ধান করতে অক্ষম।

আমরা এগুলির প্রত্যেকটির দিকে নজর দেব এবং সেগুলি কীভাবে সমাধান করব সে সম্পর্কে আলোচনা করব।

কনফিগারেশন এবং কনফিগারেশন ত্রুটি

টার্মিনালে উত্স কোড সংরক্ষণাগার ফাইলটি বের করার পরে, আপনাকে সেই ডিরেক্টরিতে পরিবর্তন করা উচিত যা নিষ্কাশিত ফাইল রয়েছে। সাধারণত, এই ডিরেক্টরিটির নাম ফাইলের নামের মতো (কোনও .tar.gzবা .tar.bz2প্রসার ছাড়াই ) will যাইহোক, কখনও কখনও ডিরেক্টরি নামটি কোনও সংস্করণের তথ্য ছাড়াই কেবল অ্যাপ্লিকেশনটির নাম।

উত্স ডিরেক্টরিতে একটি READMEফাইল এবং / অথবা একটি INSTALLফাইল (বা অনুরূপ নামের কিছু) সন্ধান করুন। এই ফাইলগুলিতে সাধারণত অ্যাপ্লিকেশনটি কীভাবে তৈরি / সংকলন করা যায় এবং নির্ভরতা সম্পর্কে তথ্য সহ এটি ইনস্টল করা সম্পর্কিত দরকারী তথ্য রয়েছে। "নির্ভরতা" হ'ল অন্যান্য উপাদান বা গ্রন্থাগারের জন্য অভিনব নাম যা সফলভাবে সংকলন করা প্রয়োজন।

আপনি READMEএবং / অথবা INSTALLফাইলটি পড়ার পরে (এবং আশাকৃতভাবে অ্যাপ্লিকেশনটির জন্য কোনও প্রাসঙ্গিক অনলাইন ডকুমেন্টেশনটি দেখেছেন), নাম নির্বাহী (ফাইলটিতে "এক্স" অনুমতি সেট আছে) ফাইলটি সন্ধান করুন configবা configure। কখনও কখনও ফাইলের একটি এক্সটেনশন থাকতে পারে, যেমন .sh(যেমন, config.sh)। এটি সাধারণত শেল স্ক্রিপ্ট যা আপনার অন্যান্য সংকলনের জন্য "বুদ্ধিমান" পরিবেশ রয়েছে তা নিশ্চিত করার জন্য কিছু অন্যান্য ইউটিলিটি চালায়। অন্য কথায়, এটি আপনার প্রয়োজনীয় যা কিছু ইনস্টল করেছেন তা নিশ্চিত করে পরীক্ষা করবে।

টিপ: এটি যদি একটি পাইথন-ভিত্তিক অ্যাপ্লিকেশন হয় তবে কোনও কনফিগার ফাইলের পরিবর্তে আপনার নামের একটি ফাইল খুঁজে পাওয়া উচিত setup.py। পাইথন অ্যাপ্লিকেশনগুলি সাধারণত ইনস্টল করা খুব সহজ। এই অ্যাপ্লিকেশনটি ইনস্টল করতে, রুট হিসাবে (যেমন, উবুন্টুর নীচে নিম্নলিখিত কমান্ডের সামনে sudo রাখুন), এই কমান্ডটি চালান:

    $ python setup.py install

আপনার যা করা দরকার তা হ'ল। আপনি এই টিউটোরিয়ালটির বাকী অংশটি এড়িয়ে যেতে পারেন এবং সরাসরি আপনার অ্যাপ্লিকেশনটি ব্যবহার এবং উপভোগ করতে পারেন।

টার্মিনালে কনফিগারেশন স্ক্রিপ্ট চালান। সাধারণত, আপনি আপনার নিয়মিত ব্যবহারকারীর অ্যাকাউন্ট দিয়ে আপনার কনফিগারেশন স্ক্রিপ্টটি (এবং হওয়া উচিত) চালাতে পারেন।

$ ./config

এটি কী করছে তা সম্পর্কে ধারণা দেওয়ার জন্য স্ক্রিপ্টটি কিছু বার্তা প্রদর্শন করবে। প্রায়শই, স্ক্রিপ্টটি আপনাকে সফল বা ব্যর্থ হয়েছে কিনা এবং যদি এটি ব্যর্থ হয় তবে ব্যর্থতার কারণ সম্পর্কে কিছু তথ্য আপনাকে একটি ইঙ্গিত দেয়। যদি আপনি কোনও ত্রুটি বার্তা না পান তবে আপনি সাধারণত ধরে নিতে পারেন যে সবকিছু ঠিকঠাক হয়ে গেছে।

আপনি যদি কোনও স্ক্রিপ্ট খুঁজে না পান যা কোনও কনফিগারেশন স্ক্রিপ্টের মতো লাগে তবে এর সাধারণত অর্থ হল অ্যাপ্লিকেশনটি খুব সাধারণ একটি এবং এটি প্ল্যাটফর্মটি স্বতন্ত্র। এর অর্থ হ'ল আপনি কেবল নীচের বিল্ড / কমপাইল পদক্ষেপটি এড়িয়ে যেতে পারেন, কারণ প্রদত্ত যে Makefileকোনও সিস্টেমে কাজ করা উচিত।

একটি উদাহরণ

এই টিউটোরিয়ালে, আমি অ্যাপ্লিকেশনটি তৈরি করার সময় আপনি যে ধরণের ত্রুটির মুখোমুখি হতে পারেন তার উদাহরণ হিসাবে নিউজবাউটার নামে পাঠ্য-ভিত্তিক আরএসএস পাঠক ব্যবহার করতে যাচ্ছি। নিউজবাটারের জন্য, কনফিগারেশন স্ক্রিপ্টের নাম config.sh। আমার সিস্টেমে যখন আমি রান করি তখন config.shনিম্নলিখিত ত্রুটিগুলি ঘটে:

tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found

You need package sqlite3 in order to compile this program.
Please make sure it is installed.

কিছু গবেষণা করার পরে, আমি দেখতে পেলাম, আসলে, sqlite3অ্যাপ্লিকেশনটি ইনস্টল করা হয়েছিল। তবে, যেহেতু আমি উত্স থেকে তৈরি করার চেষ্টা করছি, এটি এমন একটি টিপ যা config.shআসলে যা খুঁজছে তা হ'ল উন্নয়ন লাইব্রেরি (শিরোলেখ) sqlite3। উবুন্টুতে, বেশিরভাগ প্যাকেজগুলির একটি সম্পর্কিত ডেভেলপমেন্ট কাউন্টার পার্ট প্যাকেজ থাকে যা শেষ হয় -dev। (অন্যান্য প্ল্যাটফর্ম, যেমন ফেডোরা, প্রায়শই -develবিকাশ প্যাকেজগুলির জন্য প্যাকেজ প্রত্যয় ব্যবহার করে))

sqlite3বিকাশ প্যাকেজের উপযুক্ত প্যাকেজটি সন্ধান করতে আমরা apt-cacheউবুন্টুতে ইউটিলিটিটি ব্যবহার করতে পারি (এবং একইভাবে yumফেডোরার ইউটিলিটি):

tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite

এই কমান্ডটি ফলাফলের একটি বৃহত তালিকার প্রত্যাবর্তন করে, তাই উপযুক্ত প্যাকেজটি কোনটি তা নির্ধারণ করতে আমাদের কিছুটা গোয়েন্দা কাজ করতে হবে। এই ক্ষেত্রে, উপযুক্ত প্যাকেজটি পরিণত হয় libsqlite3-dev। লক্ষ্য করুন যে কখনও কখনও আমরা যে প্যাকেজটির সন্ধান করছি তার libকেবল একই প্যাকেজের নাম প্লাসের পরিবর্তে উপসর্গ থাকবে -dev। এটি কারণ কখনও কখনও আমরা কেবল একটি ভাগ করা লাইব্রেরি খুঁজছি যা বিভিন্ন বিভিন্ন অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হতে পারে। ইনস্টল করতে libsqlite3-dev, টার্মিনালে টিপিকাল অ্যাপ-গেট ইনস্টল কমান্ডটি চালান:

tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev

এখন, আমরা config.shএই নির্ভরতা সমস্যার সমাধান করেছি এবং আমাদের আর কোনও নির্ভরতার সমস্যা না রয়েছে তা নিশ্চিত করার জন্য আমাদের আবার দৌড়াতে হবে। (যদিও আমি এটি এখানে দেখাব না, নিউজবাটারের ক্ষেত্রে, আমাকে libcurl4-openssl-devপ্যাকেজটিও ইনস্টল করতে হবে ।) এছাড়াও, আপনি যদি কোনও বিকাশ প্যাকেজ ইনস্টল করেন (যেমন libsqlite3-dev) এবং সম্পর্কিত অ্যাপ্লিকেশন প্যাকেজ (যেমন, sqlite3) না হয় ইতিমধ্যে ইনস্টল করা হয়েছে, বেশিরভাগ সিস্টেম একই সময়ে সংশ্লিষ্ট অ্যাপ্লিকেশন প্যাকেজটি স্বয়ংক্রিয়ভাবে ইনস্টল করবে।

যখন কনফিগারেশনটি সফলভাবে চলে, ফলাফলটি এটি এক বা একাধিক মেক ফাইল তৈরি করবে। এই ফাইলগুলির নাম সাধারণত দেওয়া হয় Makefile(ইউনিক্স / লিনাক্সে ফাইলের নামের বিষয়টি মনে রাখবেন!)। যদি বিল্ড প্যাকেজটিতে উপ-ডিরেক্টরিগুলি অন্তর্ভুক্ত থাকে src, ইত্যাদি ইত্যাদি অন্তর্ভুক্ত থাকে তবে এই উপ-ডিরেক্টরিগুলির মধ্যে একটিতে একটিও থাকবে Makefile

বিল্ডিং এবং সংকলন ত্রুটি

এখন, আমরা আসলে অ্যাপ্লিকেশনটি সংকলন করতে প্রস্তুত। এটিকে প্রায়শই বিল্ডিং বলা হয় এবং নামটি কিছু নির্মাণের বাস্তব-বিশ্ব প্রক্রিয়া থেকে ধার করা হয়। অ্যাপ্লিকেশনটির বিভিন্ন "টুকরা", যা সাধারণত একাধিক উত্স কোড ফাইল হয়, একত্রে সামগ্রিক অ্যাপ্লিকেশনটি তৈরি করে। মেক ইউটিলিটি বিল্ড প্রক্রিয়া পরিচালনা করে এবং অন্যান্য অ্যাপ্লিকেশনগুলিকে যেমন সংকলক এবং লিঙ্কারকে ডেকে আনে আসলে কাজটি করার জন্য। বেশিরভাগ ক্ষেত্রে আপনি যে ডিরেক্টরিটি কনফিগারেশন চালিয়ে গিয়েছিলেন কেবল সেখান থেকে মেক (আপনার নিয়মিত ব্যবহারকারী অ্যাকাউন্ট সহ) চালান। (যেমন কিউটি লাইব্রেরির সাথে লিখিত অ্যাপ্লিকেশনের সংকলন হিসাবে কয়েক ক্ষেত্রে, ইন, আপনি যদি এর পরিবর্তে qmake মত অন্য "মোড়কের" অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজন হবে। আবার, সবসময় পরীক্ষা READMEএবং / অথবা INSTALLবিস্তারিত জানার জন্য নথি।)

উপরের কনফিগারেশন স্ক্রিপ্টের মতো, আপনি যখন টার্মিনালে মেক (বা অনুরূপ ইউটিলিটি) চালাবেন, এটি কী সম্পাদন করছে এবং কোনও সতর্কতা এবং ত্রুটি সম্পর্কে কিছু বার্তা প্রদর্শন করবে। আপনি সাধারণত সতর্কতাগুলিকে অগ্রাহ্য করতে পারেন, কারণ এগুলি মূলত অ্যাপ্লিকেশন বিকাশকারীদের জন্য এবং তাদের বলছেন যে কিছু মানক অনুশীলন রয়েছে যা লঙ্ঘিত হচ্ছে। সাধারণত, এই সতর্কতাগুলি অ্যাপ্লিকেশন কার্যকে প্রভাবিত করে না। অন্যদিকে, সংকলক ত্রুটিগুলি অবশ্যই মোকাবেলা করতে হবে। নিউজবাটারের সাহায্যে, আমি যখন দৌড়ে এসেছি তখন কিছুক্ষণের জন্য জিনিস ঠিকঠাক হয়ে গেছে, তবে তারপরে আমার একটি ত্রুটি হয়েছিল:

tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1

প্রথম ত্রুটির সম্মুখীন হওয়ার সাথে সাথে মেক প্রক্রিয়াটি বন্ধ হয়ে যাবে। সংকলক ত্রুটিগুলি পরিচালনা করা কখনও কখনও কৌশলযুক্ত ব্যবসায় হতে পারে। সমস্যা সম্পর্কে কিছু সূত্রের জন্য আপনাকে ত্রুটিগুলি দেখতে হবে। সাধারণত সমস্যাটি হ'ল কিছু শিরোলেখ ফাইল, যা সাধারণত বর্ধিত থাকে .hবা .hppথাকে না। উপরের ত্রুটির ক্ষেত্রে এটি স্পষ্ট হয় (বা হওয়া উচিত!) সমস্যাটি হ'ল stfl.hহেডার ফাইলটি খুঁজে পাওয়া যায় না। যেমন এই উদাহরণটি দেখায়, আপনি ত্রুটি বার্তার প্রথম লাইনটি দেখতে এবং সমস্যার অন্তর্নিহিত কারণ খুঁজতে আপনার পথে কাজ করতে চান।

নিউজবাউটার ডকুমেন্টেশন (যা শুরু করার আগে আমার করা উচিত ছিল, তার পরে দেখার পরে) তবে টিউটোরিয়ালটির এই অংশটি খুব অর্থবহ হবে না!), আমি আবিষ্কার করেছি যে এটির জন্য একটি তৃতীয় পক্ষের লাইব্রেরি প্রয়োজন এসটিএফএল। সুতরাং আমরা এই ক্ষেত্রে কি করব? ঠিক আছে, আমরা প্রয়োজনীয়ভাবে এটি প্রয়োজনীয় লাইব্রেরির জন্য একই একই প্রক্রিয়াটি পুনরাবৃত্তি করি: গ্রন্থাগারটি অর্জন করুন এবং এর জন্য কনফিগার-বিল্ড-ইনস্টল প্রক্রিয়াটি কার্যকর করুন এবং তারপরে, পছন্দসই অ্যাপ্লিকেশনটি তৈরি করা পুনরায় শুরু করুন। উদাহরণস্বরূপ, এসটিএফএল এর ক্ষেত্রে, libncursesw5-devএটি সঠিকভাবে তৈরি করার জন্য আমাকে প্যাকেজটি ইনস্টল করতে হয়েছিল । (সাধারণত, অন্য প্রয়োজনীয় অ্যাপ্লিকেশন ইনস্টল করার পরে আমাদের মূল অ্যাপ্লিকেশনটিতে কনফিগারেশন পদক্ষেপটি পুনরায় করা প্রয়োজন হয় না তবে এটি কখনও আঘাত করে না))

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

ইনস্টল করার প্রক্রিয়া

বিল্ড প্রক্রিয়াটি সফলভাবে শেষ হওয়ার পরে, আপনি অ্যাপ্লিকেশনটি ইনস্টল করতে প্রস্তুত। বেশিরভাগ ক্ষেত্রে, ফাইল সিস্টেমের সাধারণ অঞ্চলে অ্যাপ্লিকেশন ইনস্টল করতে (যেমন, /usr/binবা /usr/share/bin, ইত্যাদি), আপনাকে রুট হিসাবে ইনস্টলেশন চালাতে হবে। ইনস্টল করা পুরো প্রক্রিয়াটির পক্ষে সহজতম পদক্ষেপ। ইনস্টল করতে, টার্মিনাল রান করুন:

$ make install

কোনও ত্রুটির জন্য এই প্রক্রিয়াটির আউটপুট পরীক্ষা করুন। যদি সবকিছু সফল হয় তবে আপনার কমান্ডের নাম টার্মিনালে চালানো উচিত এবং এটি চালু হবে। (কমান্ড লাইনের শেষে যুক্ত করুন, যদি এটি কোনও জিইউআই অ্যাপ্লিকেশন হয়, বা আপনি অ্যাপ্লিকেশনটি শেষ না হওয়া পর্যন্ত টার্মিনাল সেশনটি ব্যবহার করতে পারবেন না))

আপনি যখন উত্স থেকে কোনও অ্যাপ্লিকেশন তৈরি করেন, এটি সাধারণত উবুন্টুতে জিইউআই মেনুগুলিতে কোনও আইকন বা শর্টকাট যুক্ত করে না। আপনাকে এটি ম্যানুয়ালি যুক্ত করতে হবে।

এবং উবুন্টুতে উত্স থেকে কোনও অ্যাপ্লিকেশন তৈরি এবং ইনস্টল করার জন্য এটি মূলত প্রক্রিয়া, আপনি কয়েকবার এটি করার পরে এটি আপনার দ্বিতীয় প্রকৃতির হয়ে উঠবে!


টিম, আমি আপনার টিউটোরিয়ালটি পড়তে পছন্দ করতাম, তবে আপনার পোস্ট করা লিঙ্কটি কার্যকর হয় না।
গ্যারেথ_উবলস

6

ভাল, ./configure --help আপনাকে GNU অটোটুলগুলি তৈরি করা কনফিগার ফাইলগুলির জন্য প্রচুর তথ্য দেবে। এর বেশিরভাগটি বৈশিষ্ট্যগুলি সক্ষম না করে --with / - এ নেমে আসে (এটি লাইব্রেরিটি কোথায় পাবেন তা বলতে "ভাগ করে নেওয়া" এর মতো একটি অতিরিক্ত পরামিতি নিতে পারে)।

অন্যান্য গুরুত্বপূর্ণ বিষয়গুলি হ'ল - ਪ੍ਰੀফিক্স (যা / ইউএসআর / স্থানীয় / বেশিরভাগ সময় ডিফল্ট থাকে) কোথায় ইনস্টল করতে হবে তা বলতে (যদি আপনি প্যাকেজ তৈরি করে থাকেন তবে আপনি সাধারণত এটিকে --prefix = / usr বা সম্ভবত --prefix হিসাবে চান = / অপ্ট / YourPackage)।

লিনাক্সে, / lib, / usr / lib এবং / usr / স্থানীয় / lib সাধারণত আমার জিসিসি অনুসন্ধান করা হয় এবং ldconfig- র ডিফল্ট কনফিগারেশনে অন্তর্ভুক্ত থাকে। যদি আপনার কোনও ভাল কারণ না থাকে তবে আপনি এখানে আপনার লাইব্রেরি চান। /etc/ld.so.conf অতিরিক্ত এন্ট্রি তালিকাবদ্ধ করতে পারে।

"gcc -l" চালানোর চেষ্টা করে এবং এটির কোনও ত্রুটি আছে কিনা তা দেখে কনফিগার করুন এবং তাদের সন্ধান করুন। অনুসন্ধানের অতিরিক্ত পাথ যোগ করতে আপনি আপনার সিএফএলএজিএস প্যারামিটারে "-L" যুক্ত করতে পারেন।

আপনার একাধিক সংস্করণ ইনস্টল থাকতে পারে এবং পুরানো সংস্করণটির সাথে সংযুক্ত সফ্টওয়্যারগুলি এর বিপরীতে লিঙ্কিত থাকবে (লিনাক্সের বাইন্ডিংটি খুঁজে পেতে ldd চালান) তবে নতুন সংকলনগুলি সাধারণত আপনার সিস্টেমে ডায়নামিক লাইব্রেরির সর্বশেষ সংস্করণটিকে লক্ষ্য করে।

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

ls -l ইনস্টল করা লাইব্রেরিগুলি খুঁজে পেতে আপনার সেরা বেট।

এবং আমি যেখানে তথ্য বাইরে আছি; কীভাবে প্যাকেজগুলির সাথে ভাল খেলবেন: জানেন না। সম্ভব হলে, সমস্যাটি এড়াতে আমি চেষ্টা করে জিনিসগুলিকে একটি প্যাকেজে গুটিয়ে রাখি।


4

"কীভাবে আর্গুমেন্টগুলি পাস করতে হবে তা আমি কীভাবে আবিষ্কার করব? / কনফিগারারে?"

সাধারণত: ./configure --help আপনাকে সেখানে কী চাইবে তা বলবে।

"আমি কীভাবে বলতে পারি যে আমি কোন লাইব্রেরি ইনস্টল করেছি এবং কোন সংস্করণগুলি আছে?"

এটি সিস্টেমের উপর নির্ভর করে। একটি উপায় হ'ল find /|grep libname|lessসাধারনত লাইব্রেরি ফাইলগুলির ফাইলনামের সংস্করণ রয়েছে do

"আমি কীভাবে আমার সাধারণ সিস্টেমটি না ভেঙে লাইব্রেরির একাধিক সংস্করণ ইনস্টল করতে পারি?"

আবার, সিস্টেম এবং গ্রন্থাগারের উপর নির্ভর করে। sudo make altinstallআপনার জন্য একটি রূপান্তরিত নাম তৈরি করবে। লাইব্রেরির ফাইলগুলি সাধারণত নিজের সংস্করণ করে। মনে রাখবেন তবে; যেহেতু সংস্করণগুলি প্রায়শই একটি "নর্মালাইজড" নামের সাথে প্রতিলিঙ্ক তৈরি করে এটি জিনিসগুলিকে ভেঙে দিতে পারে।

"আমি যদি এমন কোনও সিস্টেমে উত্স থেকে জিনিসগুলি ইনস্টল করছি যা অন্যথায় প্যাকেজগুলি ব্যবহার করে পরিচালিত হয়, তবে এটি করার সর্বোত্তম উপায় কী?"

./Configure এ --prefix প্যারামিটার ব্যবহার করা এবং সেগুলিকে কোথাও রেখে দেওয়া /optএকটি ভাল অনুশীলন।

দাবি অস্বীকার : আমি কোনও উপায়েই বিশেষজ্ঞ নই, তবে আমি সিএমডি লাইন (স্ল্যাকওয়্যার, সেন্টস, রেডহ্যাট, উবুন্টু, অন্যদের বিবিধ এবং ওএস এক্স) থেকে 5 বছরের বেশি বয়সীদের জন্য লিনাক্স ব্যবহার করছি ।


4

আপনার প্রশ্নের কিছুটা উত্তর দেওয়ার জন্য আমি অন্য দিন আপনি কী লাইব্রেরি ইনস্টল করেছেন এবং সংস্করণগুলি (এটি লিনাক্স ডিবিয়ানে রয়েছে তাই অন্যান্য সংস্করণগুলির সাথেও কাজ করবে) তা দেখতে ভাল উপায় পেলাম।

dpkg --list

এই জাতীয় কিছু আউটপুট সহ আপনার একটি দীর্ঘ তালিকা পাওয়া উচিত

ii  libssl0.9.8    0.9.8c-4etch5  SSL shared libraries
ii  libssp0        4.1.1-21       GCC stack smashing protection library
ii  libstdc++5     3.3.6-15       The GNU Standard C++ Library v3
ii  libstdc++5-3.3 3.3.6-15       The GNU Standard C++ Library v3 (development
ii  libstdc++6     4.1.1-21       The GNU Standard C++ Library v3

4

সাইমন,

1.) ./configure --help একটি ভাল পরিমাণে তথ্য সরবরাহ করে। আমি এটি পরীক্ষা করে দেখার পরামর্শ দিই। যথাযথভাবে স্ট্যাটিক / ডায়নামিকভাবে সংযুক্ত গ্রন্থাগারগুলি সংকলনের জন্য এটিতে সাধারণত বিকল্প থাকে।

২) লাইব্রেরিগুলি গতিশীল লিঙ্কার পথে থাকে। এটি সাধারণত /etc/ld.so.conf এ সেট করা থাকে। লিঙ্কারটি যথাযথ লাইব্রেরির জন্য অনেকটা প্যাথ এনভায়রনমেন্ট ভেরিয়েবলের সাথে প্রথমটির সাথে মেলে।

৩) লাইব্রেরির সংস্করণ পরিবর্তিত হওয়ার সাথে সাথে আপনাকে সমস্ত কিছু পুনরায় সংকলন করতে হবে কারণ এটি সাধারণত সমস্যার দিকে নিয়ে যায়। আপনি যদি কিছু অনুসন্ধান করেন তবে সম্ভবত স্ট্যাটিকালি লিঙ্কিং একটি খারাপ ধারণা হ'ল কারণগুলির আওডেলগুলি খুঁজে পাবেন। আমি এত দিন এটি করিনি আমি এখানে সত্যই বিস্তারিত বলতে পারি না।

৪) এটি কিছুটা কঠিন। একেবারে নিশ্চিত করতে আপনার লাইব্রেরির পাথটি পরীক্ষা করা দরকার ib লাইব্রেরিতে সাধারণত ইনস্টল হওয়া সংস্করণটির প্রতীকী লিঙ্ক থাকে।

যেমন libssh2.so.1 -> libssh2.so.1.0.0

সাধারণত লোকেরা তাদের নিজস্ব ডেবিয়ান প্যাকেজগুলি রোল করে বা অন্য কোনও কৌশল ব্যবহার করে তারা ইনস্টল করা গ্রন্থাগারগুলি এবং প্রোগ্রামগুলি পরিচালনা করে। আমি স্টো ( http://www.gnu.org/software/stow/ ) ব্যবহার করে ইনস্টল করা সফ্টওয়্যার পরিচালনা করি যা খুব সহজ এবং প্রতীকী লিঙ্কগুলি ব্যবহার করে লাইব্রেরি ইনস্টল করে। আমার পক্ষে ডেবি / আরপিএম প্যাকেজটি নির্মাণ / ইনস্টল / পরীক্ষা করতে হবে না বলেই এটি সহজ।

৫) লাইব্রেরির একাধিক সংস্করণ সাধারণত লাইব্রেরি ডিরেক্টরিতে ইনস্টল করা যায়। এক্সিকিউটেবলের সাথে সংযুক্ত গ্রন্থাগারগুলি যে সংস্করণগুলির সাথে লিঙ্কিত হয়েছিল তার সাথে লিঙ্কিত থাকবে। এক্সিকিউটেবলের উপর ldd চালানো আপনাকে জানাবে যে এক্সিকিউটেবল কোন লাইব্রেরিগুলির সাথে লিঙ্কযুক্ত।

).) যেমনটি আমি আগে উল্লেখ করেছি, নিজের নিজস্ব ডেবিয়ান প্যাকেজগুলি ঘুরিয়ে দেওয়া বা স্টো ব্যবহার করা সম্ভবত সবচেয়ে পরিষ্কার সমাধান।

).) আমি ম্যাক ওএসএক্সের পক্ষে সত্যিই কথা বলতে পারি না তবে লিনাক্সের জন্য বিতরণের প্যাকেজিং সিস্টেম সবচেয়ে ভাল উপায়।

৮) সম্ভবত এলডিডি ব্যবহার করে এবং কোন সংস্করণের বিপরীতে কোনও লিঙ্ক যুক্ত রয়েছে বা কোন কার্যনির্বাহকের বিরুদ্ধে লিখিত কোন লাইব্রেরি খুঁজে পাওয়া যায় না তা খুঁজে বের করে প্রচুর হতাশার সমাধান হবে be pkg-config আপনাকে অনেক সাহায্য করতে পারে তবে কেবল এটি ব্যবহার করে এমন সফ্টওয়্যারগুলির জন্য। এটি আজকাল জনপ্রিয় যদিও এটি ডিফল্ট অটোটুলগুলি বিল্ড সিস্টেমের অংশ নয়।


4

স্ট্যাটিক লাইব্রেরিগুলি একটি ভাল ধারণা নয় - আপনার যদি লাইব্রেরিটি আপগ্রেড করতে হয় (একটি সুরক্ষা সমস্যা সমাধানের জন্য, উদাহরণস্বরূপ), আপনাকে সেই লাইব্রেরির উপর নির্ভরতার সাথে সবকিছু পুনরায় সংকলন করতে হবে।

আমার সিস্টেমের সাথে "মেক ইনস্টল" সম্ভাবনা জাগ্রত করার ধারণাটি আমি পছন্দ করি না, তবে অন্যেরা যেমন বলেছে, সাধারণত অন্য কোথাও ইনস্টল করার জন্য -প্রেফিক্স ব্যবহার না করে / ইউএসআর / লোকাল-এ জিনিস ইনস্টল করা পুরোপুরি কম ব্যথা হয়। সুতরাং, আমি আমার নিয়মিত (অ-সুবিধাবঞ্চিত) ব্যবহারকারীর কাছে / ইউএসআর / স্থানীয় ছিটিয়েছি। এই পদ্ধতিতে "মেক ইনস্টল" গুরুত্বপূর্ণ সিস্টেম ফাইলগুলির সাথে গোলযোগ না করার গ্যারান্টিযুক্ত। (এটি সম্ভবত বহু-ব্যবহারকারী সিস্টেমে কাজ করবে না though এটি ভার্চুয়াল সার্ভারের জন্য দুর্দান্ত for


4

যদিও এটি আপনার প্রশ্নের তালিকায় স্পষ্টভাবে ছিল না, আপনি নিজের উপস্থায় উল্লেখ করেছেন:

./configure && make && sudo make install সাধারণত পর্যাপ্ত, তবে কখনও কখনও এটি কাজ করে না - এবং যখন এটি হয় না, আমি প্রায়শই আটকে যাই।

আমি যখন দেবিয়ান বা উবুন্টুতে আটকে থাকি তখন আমি অটো-এপটি ব্যবহার করব যা কনফিগার করে না এমন ফাইলগুলি থাকা প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ইনস্টল করবে।

দেখা:

আপনি যে সরঞ্জামটি সহজে দেখতে পাচ্ছেন তা হ'ল চেকইনস্টল, এটি make installআপনার ইনস্টল করা প্যাকেজগুলির তালিকার সাথে ইনস্টল হওয়া অ্যাপ্লিকেশনগুলি যুক্ত করে: https://help.ubuntu.com/commune/CheckInstall


3

ওএস এক্স এর জন্য:

  • ./ কনফিগারে কোন যুক্তি পাস করতে হবে তা আমি কীভাবে বুঝব?

./configure - সহায়তা

  • একটি ভাগ করা এবং একটি স্ট্যাটিকালি লিঙ্কড লাইব্রেরির মধ্যে আসল পার্থক্যগুলি কী? আমি কেন স্থিরভাবে সমস্ত কিছু সংযুক্ত করতে পারি না (এই দিনগুলিতে র‌্যাম এবং ডিস্কের জায়গা কম সস্তা) এবং তাই অদ্ভুত গ্রন্থাগারের সংস্করণ বিরোধগুলি এড়াতে পারি?

ভাগ করা লাইব্রেরিগুলি ব্যবহার করে লাইব্রেরিটি এটির ব্যবহার করে এমন সমস্ত কিছু পুনরায় কম্পাইল না করে আপগ্রেড করতে দেয়।

  • ওএস এক্স / লিনাক্সের আওতায় ভাগ করা লাইব্রেরিগুলি কীভাবে কাজ করে - যেখানে তারা ফাইল সিস্টেমে থাকে, কীভাবে।

সিস্টেম লাইব্রেরিগুলি / usr / lib এ থাকে।

আপনার নিজের লাইব্রেরিগুলি লাইভ ইন / ইউএসআর / লোকাল / লাইব (/ usr / স্থানীয় হ'ল। / কনফিগারারের জন্য পূর্বনির্ধারিত পতাকা হিসাবে সংকলন করুন)।

পরিবেশের ভেরিয়েবলগুলি DYLD_FALLBACK_LIBRARY_PATH এবং LD_LIBRARY_PATH আপনাকে কোন ফোল্ডারটি সন্ধান করতে হবে তা নির্দিষ্ট করতে দেয়, সুতরাং / ইউএসআর / স্থানীয় / লিব তালিকার শুরুতে থাকা উচিত।

  • আমার স্বাভাবিক সিস্টেমটি না ভেঙে আমি কীভাবে একটি লাইব্রেরির একাধিক সংস্করণ ইনস্টল করতে পারি?

উপরের পরিবেশের ভেরিয়েবলের সাথে / usr / লোকাল - সবকিছুতে ইনস্টল করুন, / usr / স্থানীয় / lib এর সংস্করণটি আপনার পরিবেশের / usr / lib সংস্করণটির চেয়ে বেশি প্রাধান্য পাবে।

  • আমি যদি এমন কোনও সিস্টেমে উত্স থেকে জিনিসগুলি ইনস্টল করছি যা অন্যথায় প্যাকেজগুলি ব্যবহার করে পরিচালিত হয়, তবে এটি করার সর্বোত্তম উপায় কী?

/ Usr / স্থানীয় ইনস্টল করুন। উবুন্টুতে, আমি একটি ডিবে প্যাকেজ তৈরি করতে প্রথমে চেকইনস্টল ব্যবহার করে চেষ্টা করি।

  • ধরে নিচ্ছি যে আমি উত্স থেকে বেআইনিভাবে কিছু সংকলন পরিচালনা করেছি, তবে আমি কীভাবে প্যাকেজ করতে পারি যাতে অন্য লোকদের একই হুপ থেকে ঝাঁপিয়ে না পড়তে হয়? বিশেষত ওএস এক্সে ....

একটি ব্লগ পোস্টে সংকলনের পদক্ষেপগুলি নথিভুক্ত করুন, আমি বলব।

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