Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วิธีคอมไพล์โปรแกรม 32 บิตบน 64 บิต gcc ใน C และ C++


ปัจจุบันคอมไพเลอร์มาพร้อมกับเวอร์ชัน 64 บิตที่เป็นค่าเริ่มต้น บางครั้งเราจำเป็นต้องคอมไพล์และรันโค้ดในระบบ 32 บิต ในครั้งนั้นเราต้องใช้ฟีเจอร์นี้

ขั้นแรกเราต้องตรวจสอบเวอร์ชันเป้าหมายปัจจุบันของคอมไพเลอร์ gcc ในการตรวจสอบนี้ เราต้องพิมพ์คำสั่งนี้

gcc –vUsing built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapperOFFLOAD_TARGET_NAMES=nvptx-noneOFFLOAD_TARGET_DEFAULT=1Targ64..... ............................

นี่แสดงว่า Target คือ x86_64 ดังนั้นเราจึงใช้ gcc เวอร์ชัน 64 บิต ในการใช้ระบบ 32 บิต เราต้องเขียนคำสั่งต่อไปนี้

gcc –m32 program_name.c

บางครั้งคำสั่งนี้อาจสร้างข้อผิดพลาดบางอย่างเช่นด้านล่าง สิ่งนี้บ่งชี้ว่าไลบรารีมาตรฐานของ gcc หายไป ในสถานการณ์นั้นเราต้องติดตั้งมัน

ในไฟล์รวมจาก test_c.c:1:0:/usr/include/stdio.h:27:10:ข้อผิดพลาดร้ายแรง:bits/libc-header-start.h:ไม่มี fileor directory#include ^~~~~~~~~~~~~~~~~~~~~~~~~~ การรวบรวมสิ้นสุดลง

ตอนนี้ ในการติดตั้งไลบรารีมาตรฐานสำหรับ gcc เราต้องเขียนคำสั่งต่อไปนี้

sudo apt-get install gcc-multilibsudo apt-get install g++-multilib

ตอนนี้โดยใช้รหัสนี้ เราจะเห็นความแตกต่างของการดำเนินการในระบบ 32 บิตและระบบ 64 บิต

ตัวอย่าง

#includemain(){ printf("The Size is:%lu\n", sizeof(long));}

ผลลัพธ์

$ gcc test_c.ctest_c.c:3:1:warning:return type defaults to 'int' [-Wimplicit-int]main(){^~~~$ ./a.outThe Size is:8

ก่อน>

ผลลัพธ์

$ gcc -m32 test_c.ctest_c.c:3:1:warning:return type defaults to 'int' [-Wimplicit-int]main(){^~~~test_c.c:ในฟังก์ชัน 'main':test_c.c:4:28:คำเตือน:รูปแบบ '%lu' คาดหวังอาร์กิวเมนต์ประเภท 'long unsignedint' แต่อาร์กิวเมนต์ 2 มีประเภท 'unsigned int' [-Wformat=]printf("ขนาดคือ:%lu\n" , sizeof(long));~~^%u$ ./a.outThe Size is:4