Computer >> Máy Tính >  >> Lập trình >> C ++

Biên dịch chương trình 32-bit trên gcc 64-bit trong C và C ++

Ngày nay, trình biên dịch đi kèm với phiên bản 64-bit mặc định. Đôi khi chúng ta cần biên dịch và thực thi mã vào một hệ thống 32bit nào đó. Trong thời gian đó, chúng tôi phải sử dụng tính năng thisS.

Lúc đầu, chúng tôi Cạo để kiểm tra phiên bản mục tiêu hiện tại của trình biên dịch gcc. Để kiểm tra điều này, chúng ta phải nhập lệnh này.

 gcc –vSử dụng thông số kỹ thuật cài sẵn.COLLECT_GCC =gccCOLLECT_LTO_WRAPPER =/ usr / lib / gcc / x86_64-linux-gnu / 7 / lto-wrapperOFFLOAD_TARGET_NAMES =nvptx-noneOFFLOADULT =1 gET_Darget ..... linux ..... ............................ 

Ở đây nó cho thấy Target là x86_64. Vì vậy, chúng tôi đang sử dụng phiên bản 64-bit của gcc. Bây giờ để sử dụng hệ thống 32-bit, chúng ta phải viết lệnh sau.

 gcc –m32 program_name.c 

Đôi khi lệnh này có thể tạo ra một số lỗi như bên dưới. Điều này chỉ ra rằng thư viện chuẩn của gcc bị thiếu. Trong tình huống đó, chúng tôi phải cài đặt chúng.

 Trong tệp được bao gồm từ test_c.c:1:0:/usr/include/stdio.h:27:10:lỗi nghiêm trọng:bits / libc-header-start.h:Không có thư mục tệp hoặc tệp nào như vậy # include  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ đã kết thúc quá trình biên dịch. 

Bây giờ, để cài đặt thư viện chuẩn cho gcc, chúng ta phải viết các lệnh sau.

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

Bây giờ bằng cách sử dụng mã này, chúng ta sẽ thấy sự khác biệt của việc thực thi trong hệ thống 32 bit và hệ thống 64 bit.

Ví dụ

 #include  main () {printf ("Kích thước là:% lu \ n", sizeof (long));} 

Đầu ra

 $ gcc test_c.ctest_c.c:3:1:warning:kiểu trả về mặc định là 'int' [-Wimplicit-int] main () {^ ~~~ $ ./a.out Kích thước là:8  

Đầu ra

 $ gcc -m32 test_c.ctest_c.c:3:1:warning:kiểu trả về mặc định là 'int' [-Wimplicit-int] main () {^ ~~~ test_c.c:Trong hàm 'main':test_c.c:4:28:warning:format '% lu' mong đợi đối số thuộc loại 'long unsignedint', nhưng đối số 2 có kiểu 'unsigned int' [-Wformat =] printf ("Kích thước là:% lu \ n" , sizeof (long)); ~~ ^% u $ ./a.out Kích thước là:4