WSL2 Ubuntu 20.04 에서 32bit Application Compile

32bit Application Compile

64 bit 시스템에서 32 bit application을 컴파일 하려면 몇가지 크로스 라이브러리가 필요합니다. WSL 1 은 이를 지원하지 않아 32 bit 기반 sdk 는 사용할 수 없습니다. 이번 WSL 2 는 가능하다는 이야기가 있어 확인합니다.

기본형 크기 비교

먼저 기본형 크기를 비교하는 간단한 코드를 작성합니다.

#include <stdio.h>

int main(int argc, char* argv[])
{
        printf("hello world\n");
        printf("sizeof(char) : %ld byte\n", sizeof(char));
        printf("sizeof(short) : %ld byte\n", sizeof(short));
        printf("sizeof(int) : %ld byte\n", sizeof(int));
        printf("sizeof(long) : %ld byte\n", sizeof(long));
        printf("sizeof(long long) : %ld byte\n", sizeof(long long));
        printf("sizeof(float) : %ld byte\n", sizeof(float));
        printf("sizeof(double) : %ld byte\n", sizeof(double));

        return 0;
}

64 bit 컴파일 및 실행


$ g++ main.cpp
$ ./a.out
hello world
sizeof(char) : 1 byte
sizeof(short) : 2 byte
sizeof(int) : 4 byte
sizeof(long) : 8 byte
sizeof(long long) : 8 byte
sizeof(float) : 4 byte
sizeof(double) : 8 byte

시스템이 64 bit 이므로 특별한 옵션 없이 곧바로 컴파일 및 실행하여 확인합니다. long size가 8 byte인 것을 확인합니다.

32 bit 컴파일 및 실행

64 bit 시스템에서 32 bit application 을 컴파일하기 위해서는 먼저 32 bit 라이브러리 설치가 필요합니다.

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

-m32 옵션으로 컴파일 및 실행

$ g++ -m32 main.cpp
$ ./a.out
hello world
sizeof(char) : 1 byte
sizeof(short) : 2 byte
sizeof(int) : 4 byte
sizeof(long) : 4 byte
sizeof(long long) : 8 byte
sizeof(float) : 4 byte
sizeof(double) : 8 byte

long type이 4byte로 바뀌어있는 것을 확인할 수 있습니다.

결론

32bit sdk를 WSL2에서 사용하는 것이 가능합니다. (짝짝짝)

댓글

이 블로그의 인기 게시물

WSL2 Ubuntu 20.04 및 네트워크 설정

리눅스 멀티코어를 사용하는 tar 압축/해제

WSL에 X-Window로 Terminator 설치하고 Minicom까지