কম্পিউটার টিউটোরিয়াল

C/C++-এ ৬৪-বিট GCC-এ ৩২-বিট প্রোগ্রাম কম্পাইল করা

পശ্চাটভূমি

আধুনিক সিস্টেমে GCC ডিফল্টভাবে ৬৪-বিট টার্গেট করে। কিন্তু কখনো ৩২-বিট বাইনারি তৈরি করতে হয় (লিগেসি সাপোর্ট, এমবেডেড সিস্টেম, নির্দিষ্ট লাইব্রেরি কম্প্যাটিবিলিটির জন্য)।

পদ্ধতি

  1. করেন্ট টার্গেট চেক করুন: `gcc -v` → `Target: x86_64-linux-gnu` মানে ৬৪-বিট।
  2. ৩২-বিট কম্পাইল: `gcc -m32 program.c` বা `g++ -m32 program.cpp`
  3. এরর হলে মাল্টিলিব ইনস্টল করুন:
    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` প্যাকেজটি এগুলো সরবরাহ করে।

  1. C++-এ ডায়াগোনাল এবং স্ক্যালার ম্যাট্রিক্স যাচাই করার প্রোগ্রাম

  2. সি++ প্রোগ্রাম দিয়ে অন্য প্রোগ্রাম লঞ্চ করা

  3. C++ প্রোগ্রামে অবজেক্ট ফাংশনে পাস করার পদ্ধতি

  4. C++-এ কম্বিনেশন এবং পারমিউটেশন কীভাবে গণনা করবেন?