64비트 우분투리눅스에서 32비트 리눅스 바이너리 파일 실행하기

반응형

기본적으로 64비트 우분투리눅스에서 32비트 리눅스 바이너리 파일은 실행되지 않는다.


하지만 현재 개발용으로 사용 중인 PC는 64비트이고, 개발용 크로스컴파일러는 32비트 바이너리 파일이라.. 실행되도록 해 봤다.


PC 하드웨어는 Intel i7 64bit CPU이고, Ubuntu 버전은 16.04.1 LTS이다.


일단, 리눅스머신에 32비트 크로스컴파일러 파일을 복사해 놓고 실행해 보았다.

역시나 실패.

$ ./arm-fsl-linux-gnueabi-gcc -bash: ./arm-fsl-linux-gnueabi-gcc: 그런 파일이나 디렉터리가 없습니다


예전에 ia32-libs 라이브러리를 설치해서 해결했던 기억이 있어서 ia32-libs의 설치를 시도해 본다. 

하지만 설치는 실패하고, ia32-libs 대신에 두 개의 다른 라이브러리를 추천해 준다.

$ sudo apt-get install ia32-libs 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 ia32-libs 패키지를 사용할 수 없습니다. 하지만 다른 패키지가 참조하고 있습니다. 해당 패키지가 누락되었거나 지워졌다는 뜻입니다. 아니면 또 다른 곳에서 패키지를 받아와야 하는 경우일 수도 있습니다. 하지만 다음 패키지가 대체합니다: lib32ncurses5 lib32z1 E: 'ia32-libs' 패키지는 설치할 수 있는 후보가 없습니다


lib32ncurses5를 설치해 본다. 

성공. 

이제부터 32비트 바이너리 파일을 실행할 수 있게 되었다.

$ sudo apt-get install lib32ncurses5 .. $ ./arm-fsl-linux-gnueabi-gcc arm-fsl-linux-gnueabi-gcc: fatal error: no input files compilation terminated.


hello world 프로그램(hello.c)을 만들어서 크로스컴파일해 본다. 

여기서 다시 실패.

라이브러리를 링크시키지 못한다. 

$ ./arm-fsl-linux-gnueabi-gcc -o hello hello.c gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/../libexec/gcc/arm-fsl-linux-gnueabi/4.6.2/cc1: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

lib32z1을 설치하고 다시 크로스컴파일해 본다. 

드디어 성공.

$ sudo apt-get install lib32z1 .... $ ./arm-fsl-linux-gnueabi-gcc -o hello hello.c $ file hello hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.31, not stripped

결론적으로, 64비트 우분투리눅스에서 32비트 리눅스 바이너리 파일을 실행하기 위해서는, 최근 버전의 Ubuntu의 경우 lib32ncurses5와 lib32z1을 설치하면 된다.




댓글

Designed by JB FACTORY