요즘 컴파일러는 기본 64비트 버전과 함께 제공됩니다. 때때로 우리는 32비트 시스템으로 코드를 컴파일하고 실행해야 합니다. 그럴 때 우리는 이 기능을 사용해야 합니다.
먼저 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