পശ্চাটভূমি
আধুনিক সিস্টেমে GCC ডিফল্টভাবে ৬৪-বিট টার্গেট করে। কিন্তু কখনো ৩২-বিট বাইনারি তৈরি করতে হয় (লিগেসি সাপোর্ট, এমবেডেড সিস্টেম, নির্দিষ্ট লাইব্রেরি কম্প্যাটিবিলিটির জন্য)।
পদ্ধতি
- করেন্ট টার্গেট চেক করুন: `gcc -v` → `Target: x86_64-linux-gnu` মানে ৬৪-বিট।
- ৩২-বিট কম্পাইল: `gcc -m32 program.c` বা `g++ -m32 program.cpp`
- এরর হলে মাল্টিলিব ইনস্টল করুন:
sudo apt-get update sudo apt-get install gcc-multilib g++-multilib
উদাহরণ: `sizeof(long)` পার্থক্য
#include <stdio.h>
int main() {
printf("Size of long: %zu bytes\n", sizeof(long));
return 0;
}
৬৪-বিট কম্পাইলেশন:
$ gcc test.c -o test64 $ ./test64 Size of long: 8 bytes
৩২-বিট কম্পাইলেশন:
$ gcc -m32 test.c -o test32 $ ./test32 Size of long: 4 bytes
গুরুত্বপূর্ণ নোট
- `-m32` ফ্ল্যাগ কম্পাইলারকে ৩২-বিট কোড জেনারেট করতে বলে।
- ৩২-বিট মোডে পয়েন্টার সাইজ ৪ বাইট, `long` ৪ বাইট (লিনাক্সে), `long long` ৮ বাইট।
- ৬৪-বিট মোডে পয়েন্টার ৮ বাইট, `long` ৮ বাইট (লিনাক্সে), `long long` ৮ বাইট।
- Windows-এ (MSVC/MinGW) `long` ৪ বাইটই থাকে ৬৪-বিটেও (LLP64 মডেল)।
ব্যাখ্যা
`-m32` ফ্ল্যাগ GCC-কে i386 আর্কিটেকচারের জন্য কোড জেনারেট করতে নির্দেশ করে। এর জন্য ৩২-বিট লাইব্রেরি (glibc, libstdc++) সিস্টেমে ইনস্টল থাকতে হবে। `gcc-multilib` প্যাকেজটি এগুলো সরবরাহ করে।