আমি জানি ' -fPIC
' বিকল্পটি পৃথক মডিউলগুলির মধ্যে ঠিকানাগুলির সমাধান এবং স্বতন্ত্রতার সাথে কিছু করার আছে তবে আমি নিশ্চিত নই যে এর প্রকৃত অর্থ কী। তুমি কি ব্যাখ্যা করতে পারো?
আমি জানি ' -fPIC
' বিকল্পটি পৃথক মডিউলগুলির মধ্যে ঠিকানাগুলির সমাধান এবং স্বতন্ত্রতার সাথে কিছু করার আছে তবে আমি নিশ্চিত নই যে এর প্রকৃত অর্থ কী। তুমি কি ব্যাখ্যা করতে পারো?
উত্তর:
পিআইসি মানে পজিশন ইন্ডিপেন্ডেন্ট কোড
এবং উদ্ধৃতি man gcc
:
যদি লক্ষ্য মেশিনের জন্য সমর্থিত হয় তবে গতিশীল সংযোগের জন্য উপযুক্ত এবং অবস্থান সম্পর্কিত স্বাধীন কোড নির্গত করুন এবং গ্লোবাল অফসেট সারণির আকারের কোনও সীমা এড়ানো উচিত। এই বিকল্পটি এম 68 কে, পাওয়ারপিসি এবং স্পারকে একটি পার্থক্য করে। অবস্থান-স্বতন্ত্র কোডটির জন্য বিশেষ সমর্থন প্রয়োজন এবং তাই কেবলমাত্র নির্দিষ্ট মেশিনে কাজ করে।
উল্লিখিত আর্কিটেকচারগুলিতে ভাগ করা অবজেক্ট (* .so) তৈরি করার সময় এটি ব্যবহার করুন।
/usr/bin/ld: /tmp/cc7hXILq.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
তাই আমি এফপিআইসি যুক্ত করেছি এবং এটি নির্মিত হয়েছে।
f
অপশন যে "ইন্টারফেস নিয়মাবলী নিয়ন্ত্রণ কোড নির্মাণ ব্যবহৃত" জন্য জিসিসি প্রিফিক্স
এর PIC
অর্থ দাঁড়ায় "পজিশন ইন্ডিপেন্ডেন্ট কোড", এটি fpic
এম 68 কে এবং এসপিআরসি-র একটি বিশেষত্ব।
সম্পাদনা করুন: 0x6adb015 দ্বারা উল্লিখিত নথির 11 নম্বর পৃষ্ঠা এবং কোরিয়ান দ্বারা মন্তব্য করার পরে, আমি কয়েকটি পরিবর্তন করেছি:
এই বিকল্পটি কেবল ভাগ করা লাইব্রেরিগুলির জন্যই অর্থবোধ করে এবং আপনি ওএসকে বলছেন যে আপনি গ্লোবাল অফসেট টেবিল ব্যবহার করছেন, গট। এর অর্থ আপনার সমস্ত ঠিকানা উল্লেখগুলি জিওটির সাথে সম্পর্কিত এবং কোডটি একাধিক প্রক্রিয়া জুড়ে ভাগ করা যায়।
অন্যথায়, এই বিকল্পটি ছাড়া লোডারকে সমস্ত অফসেট নিজেই সংশোধন করতে হবে।
বলা বাহুল্য, আমরা প্রায়শই -Fpic / PIC ব্যবহার করি।
man gcc
বলেছেন:
-fpic ভাগ করে নেওয়ার জন্য উপযুক্ত অবস্থান-স্বতন্ত্র কোড (পিক) উত্পন্ন করুন লাইব্রেরি, লক্ষ্য মেশিনের জন্য সমর্থিত হলে। এই জাতীয় কোড সমস্ত অ্যাক্সেস করে গ্লোবাল অফসেট টেবিলের মাধ্যমে ধ্রুবক ঠিকানাগুলি (জিওটি)। গতিশীল প্রোগ্রামটি শুরু হওয়ার সাথে সাথে লোডার জিওটি এন্ট্রিগুলি সমাধান করে (গতিশীল লোডার জিসিসির অংশ নয়; এটি অপারেটিং সিস্টেমের অংশ)। যদি লিঙ্কযুক্ত এক্সিকিউটেবলের জন্য জিওটি আকার কোনও মেশিন-নির্দিষ্টকে ছাড়িয়ে যায় সর্বাধিক আকার, আপনি লিঙ্কার ইঙ্গিত করে একটি ত্রুটি বার্তা পাবেন যে -fpic কাজ করে না; সেক্ষেত্রে পরিবর্তে -fPIC দিয়ে পুনরায় কম্পাইল করুন। (এই সর্বাধিকগুলি SPARC এ 8k এবং m68k এবং RS / 6000 এ 32k। 386 এর কোনও সীমা নেই)) অবস্থান-স্বতন্ত্র কোডটির জন্য বিশেষ সমর্থন প্রয়োজন and শুধুমাত্র নির্দিষ্ট মেশিনে কাজ করে। 386 এর জন্য, জিসিসি পিআইসি সমর্থন করে সিস্টেম ভি কিন্তু সান 386i এর জন্য নয়। কোড উত্পন্ন আইবিএম আরএস / 6000 সর্বদা অবস্থান-স্বতন্ত্র। -fPIC যদি লক্ষ্য মেশিনের জন্য সমর্থিত হয় তবে অবস্থান-স্বতন্ত্র কোড নির্গত করুন, গতিশীল সংযোগ এবং আকারের কোনও সীমা এড়ানোর জন্য উপযুক্ত গ্লোবাল অফসেট টেবিল। এই বিকল্পটি m68k এ পার্থক্য করে এবং স্পার্ক। অবস্থান-স্বতন্ত্র কোডটির জন্য বিশেষ সমর্থন প্রয়োজন and শুধুমাত্র নির্দিষ্ট মেশিনে কাজ করে।