মাল্টিথ্রেডেড প্রোগ্রামগুলি সংকলন করার সময় gcc -pthread
এবং gcc -lpthread
কোনটির মধ্যে পার্থক্য রয়েছে ?
মাল্টিথ্রেডেড প্রোগ্রামগুলি সংকলন করার সময় gcc -pthread
এবং gcc -lpthread
কোনটির মধ্যে পার্থক্য রয়েছে ?
উত্তর:
-pthread
সংকলককে pthread লাইব্রেরিতে লিঙ্ক করার পাশাপাশি থ্রেডগুলির জন্য সংকলনটি কনফিগার করতে বলে।
উদাহরণস্বরূপ, নিম্নলিখিতগুলিতে -pthread
আমার উবুন্টু মেশিনে ইনস্টল করা জিসিসি প্যাকেজটিতে বিকল্পটি ব্যবহার করা হলে সংজ্ঞায়িত হওয়া ম্যাক্রোগুলি দেখায় :
$ gcc -pthread -E -dM test.c > dm.pthread.txt
$ gcc -E -dM test.c > dm.nopthread.txt
$ diff dm.pthread.txt dm.nopthread.txt
152d151
< #define _REENTRANT 1
208d206
< #define __USE_REENTRANT 1
ব্যবহার -lpthread
বিকল্পটি কেবলমাত্র ঘটায় pthread গ্রন্থাগার লিঙ্ক করা - প্রাক সংজ্ঞায়িত ম্যাক্রো সংজ্ঞায়িত হয় না।
নীচের লাইন: আপনার -pthread
বিকল্পটি ব্যবহার করা উচিত ।
দ্রষ্টব্য: -pthread
বিকল্পটি জিসিসি ডক্সে প্ল্যাটফর্ম নির্দিষ্ট বিকল্প হিসাবে নথিভুক্ত করা হয়েছে, তাই এটি সর্বদা উপলভ্য নাও হতে পারে। যাইহোক, এটি প্ল্যাটফর্মগুলিতে উপলব্ধ যে জিসিসি ডক্সগুলি স্পষ্টভাবে এটির জন্য তালিকাবদ্ধ করে না (যেমন i386 এবং x86-64) - উপলব্ধ হলে আপনার এটি ব্যবহার করা উচিত।
আরও মনে রাখবেন যে অন্যান্য অনুরূপ বিকল্পগুলি জিসিসি ব্যবহার করেছেন, যেমন -pthreads
( -pthread
সোলারিস ২ এর প্রতিশব্দ হিসাবে তালিকাভুক্ত ) এবং -mthread
(আই 386 এবং x86-64 উইন্ডোতে MinGW- নির্দিষ্ট থ্রেড সমর্থনের জন্য)। আমার বোধগম্যতা হ'ল জিসিসি -pthread
সমানভাবে ব্যবহার করে এগিয়ে যাওয়ার চেষ্টা করছে ।
-lpthread
পুরো পসিক্স থ্রেডিং লাইব্রেরি পাওয়ার জন্য পাস করা যথেষ্ট।
-lpthread
করে পুরো POSIX থ্রেডিং গ্রন্থাগার পেতে।
-lpthread
জন্য পুরো পাইথ্রেডস সমর্থন পাওয়ার জন্য যথেষ্ট হওয়া উচিত। অন্য কোনও সংকলন পতাকা লাগবে না।
-lpthread
কিন্তু -pthread
pthread সমর্থন পেতে যথেষ্ট নয়, যেমন আমি ইতিমধ্যে আমার আগের মন্তব্যে ব্যাখ্যা।
-lpthread
। তবে, সিসি ডকুমেন্টেশন পরামর্শ দেয় যে পাইথ্রেড সমর্থন পেতে এটি অপর্যাপ্ত হতে পারে, যা আমি পূর্ববর্তী মন্তব্যে করেছিলাম। আপনি যদি সরবরাহ না করেন -lpthread
বা কিছু এলোমেলোভাবে অন্যান্য মালিকানাধীন বিকল্পগুলি দেয় তবে আমি কী হয় সে সম্পর্কে মোটেও চিন্তা করি না । শুধু -lpthread
গ্যারান্টি pthreads করার POSIX দ্বারা নির্দিষ্ট করা হয় এবং যে জিসিসি সঙ্গে যথেষ্ট হবে বলে মনে হয় না।
-pthread
পাইথ্রেড লাইব্রেরির সাথে মাল্টিথ্রেডিংয়ের জন্য সমর্থন যোগ করে। এই বিকল্পটি প্রিপ্রসেসর এবং লিঙ্কার উভয়ের জন্য পতাকা সেট করে man gcc
।
যখন
-lpthread
লিঙ্ক করার সময় অস্তিত্বে আসে প্রিপ্রোসেসিংয়ের সময় কোনও প্রভাব থাকবে না।
একটি স্বীকৃত উত্তর আছে, কিন্তু, আইএমও এটি যথেষ্ট প্রসঙ্গ এবং অন্তর্দৃষ্টি সরবরাহ করে না। অতএব এই অতিরিক্ত উত্তর।
-lpthread
এমন কোনও সমস্যার সমাধান যা এখন আর নেই (2005 সাল থেকে)।
পুরনো সেই দিনের কথায় এর মালিকানা বাস্তবায়নের ছিল Pthreads এপিআই যে POSIX-অনুবর্তী ছিল, মত করে LinuxThreads । পসিক্স স্ট্যান্ডার্ডটি কেবল বলেছে যে কেউ যদি পসিক্স-অনুবর্তী আচরণ চায়, তবে অবশ্যই একটির সাথে লিঙ্ক করা উচিত -lpthread
, এবং লিথিংয়ের জন্য যেটি পথ্রিডস এপিআইয়ের একটি পসআইএক্স-সম্মতিসূচক বাস্তবায়নকে লিঙ্ক করার জন্য প্রয়োজন, যদি এর অনেকগুলি বাস্তবায়ন হয় ।
আধুনিক অপারেটিং সিস্টেমগুলিতে পাইথ্রেডস এপিআইয়ের একাধিক বাস্তবায়ন নেই। আর সে কারণেই -lpthread
আর কোনও উদ্দেশ্য কাজ করে না।
কম্পাইলার মত gcc
এবং clang
(এবং, সম্ভবত, সব লিনাক্স সামঞ্জস্যপূর্ণ কম্পাইলার) প্রয়োজন ব্যবহার -pthread
উভয় কম্পাইল এবং লিঙ্ক POSIX-অনুবর্তী মাল্টি থ্রেডেড অ্যাপ্লিকেশন এবং যে এক কি ব্যবহার করা আবশ্যক জন্য কমান্ড লাইন বিকল্প।
সংকলনের সময়, -pthread
বিকল্পটি প্রকাশ করে যে পাইথ্রেড এপিআই অনুরোধ করা হয়েছে (একাধিক থ্রেডিং এপিআই, যেমন সোলারিস থ্রেড থাকতে পারে) এবং প্ল্যাটফর্ম-নির্দিষ্ট ম্যাক্রোগুলি ( _REENTRANT
লিনাক্সে , _MT
সোলারিসে) সংজ্ঞায়িত করে ।
লিঙ্ক সময়ে, -pthread
প্রয়োজনীয় লাইব্রেরিতে লিঙ্কগুলি (যদি থাকে) যা POSIX- অনুবর্তী Pthreads API আচরণ প্রয়োগ করে implement
উপরোক্তগুলি পরিষ্কার করে দেয় যে কেন -lpthread
প্রয়োজনীয় বা পর্যাপ্ত নয়।