Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C 및 C++의 64비트 gcc에서 32비트 프로그램 컴파일

<시간/>

요즘 컴파일러는 기본 64비트 버전과 함께 제공됩니다. 때때로 우리는 32비트 시스템으로 코드를 컴파일하고 실행해야 합니다. 그 때 우리는 this 기능을 사용해야 합니다.

먼저 gcc 컴파일러의 현재 대상 버전을 확인하기 위해 면도합니다. 이를 확인하려면 이 명령을 입력해야 합니다.

gcc –v내장 사양 사용.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapperOFFLOAD_TARGET_NAMES=nvptx-noneOFFLOAD_TARGET_DEFAULT=86..... .......................

여기서는 Target이 x86_64임을 보여줍니다. 그래서 우리는 64비트 버전의 gcc를 사용하고 있습니다. 이제 32비트 시스템을 사용하려면 다음 명령을 작성해야 합니다.

gcc –m32 program_name.c

때때로 이 명령은 아래와 같은 오류를 생성할 수 있습니다. 이것은 gcc의 표준 라이브러리가 없음을 나타냅니다. 그런 상황에서 우리는 그것들을 설치해야 합니다.

test_c.c:1:0:/usr/include/stdio.h:27:10에서 포함된 파일:치명적 오류:bits/libc-header-start.h:해당 파일 또는 디렉터리가 없습니다.#include ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 컴파일이 종료되었습니다.

이제 gcc용 표준 라이브러리를 설치하려면 다음 명령어를 작성해야 합니다.

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

이제 이 코드를 사용하여 32비트 시스템과 64비트 시스템에서 실행의 차이점을 볼 수 있습니다.

예시

#includemain() { printf("크기:%lu\n", sizeof(long));}

출력

$ gcc test_c.ctest_c.c:3:1:경고:반환 유형의 기본값은 'int' [-Wimplicit-int] main(){^~~~$ ./a.out크기:8 

출력

$ gcc -m32 test_c.ctest_c.c:3:1:경고:반환 유형의 기본값은 '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.out크기:4