সংকলনের সময় -pthread এবং -pthread মধ্যে পার্থক্য


109

মাল্টিথ্রেডেড প্রোগ্রামগুলি সংকলন করার সময় gcc -pthreadএবং gcc -lpthreadকোনটির মধ্যে পার্থক্য রয়েছে ?


উত্তর:


116

-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সমানভাবে ব্যবহার করে এগিয়ে যাওয়ার চেষ্টা করছে ।


2
যা অদ্ভুত কারণ এটি সরাসরি পসিক্সের বিরোধিতা করে। POSIX ম্যান্ডেট দেয় যে -lpthreadপুরো পসিক্স থ্রেডিং লাইব্রেরি পাওয়ার জন্য পাস করা যথেষ্ট।
ফুজ

@FUZxxl পাসিং -lpthread করে পুরো POSIX থ্রেডিং গ্রন্থাগার পেতে।
ব্যবহারকারী 253751

5
@ মিমিবিস না, আমার অর্থ কী, পসিক্স বলেছেন যে এর সাথে সংযোগ স্থাপনের -lpthreadজন্য পুরো পাইথ্রেডস সমর্থন পাওয়ার জন্য যথেষ্ট হওয়া উচিত। অন্য কোনও সংকলন পতাকা লাগবে না।
ফুজ

1
@alecov কি জিসিসি কি ভুল আছে যে সঙ্গে কম্পাইল হচ্ছে -lpthreadকিন্তু -pthreadpthread সমর্থন পেতে যথেষ্ট নয়, যেমন আমি ইতিমধ্যে আমার আগের মন্তব্যে ব্যাখ্যা।
ফুজ

2
@ আলেকভ পসিএক্স ম্যান্ডেটে বলা হয়েছে যে আপনি যদি পসিক্স পরিবেশটি কনফিগার করেন এবং এর সাথে লিঙ্ক করেন তবে পাইথ্রেডগুলি অবশ্যই কাজ করবে -lpthread। তবে, সিসি ডকুমেন্টেশন পরামর্শ দেয় যে পাইথ্রেড সমর্থন পেতে এটি অপর্যাপ্ত হতে পারে, যা আমি পূর্ববর্তী মন্তব্যে করেছিলাম। আপনি যদি সরবরাহ না করেন -lpthreadবা কিছু এলোমেলোভাবে অন্যান্য মালিকানাধীন বিকল্পগুলি দেয় তবে আমি কী হয় সে সম্পর্কে মোটেও চিন্তা করি না । শুধু -lpthreadগ্যারান্টি pthreads করার POSIX দ্বারা নির্দিষ্ট করা হয় এবং যে জিসিসি সঙ্গে যথেষ্ট হবে বলে মনে হয় না।
ফুজ

10

-pthreadপাইথ্রেড লাইব্রেরির সাথে মাল্টিথ্রেডিংয়ের জন্য সমর্থন যোগ করে। এই বিকল্পটি প্রিপ্রসেসর এবং লিঙ্কার উভয়ের জন্য পতাকা সেট করে man gcc

যখন

-lpthread লিঙ্ক করার সময় অস্তিত্বে আসে প্রিপ্রোসেসিংয়ের সময় কোনও প্রভাব থাকবে না।


4

একটি স্বীকৃত উত্তর আছে, কিন্তু, আইএমও এটি যথেষ্ট প্রসঙ্গ এবং অন্তর্দৃষ্টি সরবরাহ করে না। অতএব এই অতিরিক্ত উত্তর।


-lpthread এমন কোনও সমস্যার সমাধান যা এখন আর নেই (2005 সাল থেকে)।

পুরনো সেই দিনের কথায় এর মালিকানা বাস্তবায়নের ছিল Pthreads এপিআই যে POSIX-অনুবর্তী ছিল, মত করে LinuxThreads । পসিক্স স্ট্যান্ডার্ডটি কেবল বলেছে যে কেউ যদি পসিক্স-অনুবর্তী আচরণ চায়, তবে অবশ্যই একটির সাথে লিঙ্ক করা উচিত -lpthread, এবং লিথিংয়ের জন্য যেটি পথ্রিডস এপিআইয়ের একটি পসআইএক্স-সম্মতিসূচক বাস্তবায়নকে লিঙ্ক করার জন্য প্রয়োজন, যদি এর অনেকগুলি বাস্তবায়ন হয়

আধুনিক অপারেটিং সিস্টেমগুলিতে পাইথ্রেডস এপিআইয়ের একাধিক বাস্তবায়ন নেই। আর সে কারণেই -lpthreadআর কোনও উদ্দেশ্য কাজ করে না।


কম্পাইলার মত gccএবং clang(এবং, সম্ভবত, সব লিনাক্স সামঞ্জস্যপূর্ণ কম্পাইলার) প্রয়োজন ব্যবহার -pthreadউভয় কম্পাইল এবং লিঙ্ক POSIX-অনুবর্তী মাল্টি থ্রেডেড অ্যাপ্লিকেশন এবং যে এক কি ব্যবহার করা আবশ্যক জন্য কমান্ড লাইন বিকল্প।

সংকলনের সময়, -pthreadবিকল্পটি প্রকাশ করে যে পাইথ্রেড এপিআই অনুরোধ করা হয়েছে (একাধিক থ্রেডিং এপিআই, যেমন সোলারিস থ্রেড থাকতে পারে) এবং প্ল্যাটফর্ম-নির্দিষ্ট ম্যাক্রোগুলি ( _REENTRANTলিনাক্সে , _MTসোলারিসে) সংজ্ঞায়িত করে

লিঙ্ক সময়ে, -pthreadপ্রয়োজনীয় লাইব্রেরিতে লিঙ্কগুলি (যদি থাকে) যা POSIX- অনুবর্তী Pthreads API আচরণ প্রয়োগ করে implement

উপরোক্তগুলি পরিষ্কার করে দেয় যে কেন -lpthreadপ্রয়োজনীয় বা পর্যাপ্ত নয়।

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