MCU
[WSL] WSL 18.04 32비트 바이너리 실행 환경 설정하기
_minit
2025. 2. 10. 15:20
리눅스 시스템에서는 멀티 아키텍처(Multiarch) 지원을 통해 64비트 시스템에서 32비트 바이너리를 실행할 수 있게 해줍니다. 멀티 아키텍처는 하나의 시스템에서 서로 다른 아키텍처의 바이너리를 동시에 실행할 수 있는 기능으로, 리눅스에서는 이를 `dpkg`와 `apt` 패키지 관리 도구를 통해 관리할 수 있습니다. 이를 통해 32비트 라이브러리와 패키지를 설치하고, 32비트 애플리케이션을 실행할 수 있게 됩니다.
현재 사용중인 하드웨어 아키텍쳐를 봅시다.
$ uname -m
- `x86_64` → 64비트 아키텍처
- `i686` → 32비트 아키텍처
- `aarch64` → 64비트 ARM 아키텍처
- `armv7l` → 32비트 ARM 아키텍처
저는 x86_64 환경에서 진행했습니다.
예를 들어 `make_ext4fs`라는 파일을 실행하고자 합니다. 이 파일이 몇 비트 실행 파일인지 확인하기 위해 `file` 명령어를 사용해줍니다.
$ file /make_ext4fs
출력 예시 :
ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.15, with debug_info, not stripped
위 출력에서 `ELF 32-bit`로 표시되므로, 이 실행 파일은 32비트 바이너리입니다
32비트 라이브러리 설치
32비트 바이너리를 실행하기 위해 필요한 라이브러리를 설치합니다.
1. 현재 아키텍처 확인:
$ dpkg --print-architecture
2. 32비트 아키텍처 추가:
$ sudo dpkg --add-architecture i386
3. 패키지 리스트 업데이트
$ sudo apt update
4. 필수 32비트 라이브러리 설치
$ sudo apt install libc6:i386 libstdc++6:i386 zlib1g:i386
32비트 실행 파일 실행
이제 32비트 실행 파일을 실행할 수 있습니다.
$ make_ext4fs --help
출력 예시 :
make_ext4fs [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ]
[ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ]
[ -L <label> ] [ -f ] [ -a <android mountpoint> ]
[ -S file_contexts ] [ -C fs_config ] [ -T timestamp ]
[ -z | -s ] [ -w ] [ -c ] [ -J ] [ -v ] [ -B <block_list_file> ]
<filename> [<directory>]
위와 같이 본인이 사용하고 싶으면 32비트 바이너리에 맞춰 출력 값이 생성될 것 입니다.
이제 64비트 리눅스 시스템에서도 32비트 실행 파일을 문제없이 실행할 수 있습니다.
728x90