임베디드/Linux BSP

크로스 컴파일러

O_oz 2024. 2. 5. 08:00
반응형

크로스 컴파일러란 컴파일한 플랫폼이 아닌, 다른 플랫폼에서 프로그램을 실행할 수 있도록 실행 파일을 생성하는 컴파일러이다

 

 

무슨 말인지 모르겠으니, 밑에 예시를 작성했다

 

리눅스에서 간단하게 코드 작성 후 컴파일 하고 실행해보자

잘 나오는 걸 확인할 수 있다

 

해당 파일을 우분투 NFS 공유 폴더에 작성했기 때문에 라즈베리파이 폴더에서도 확인 가능하다

그런데 똑같이 main을 실행하면 오류가 뜨면서 실행이 안된다

왜일까?

 

리눅스에서 컴파일한 main은 x86-64 기반 기계어로 컴파일 되었다

이런 파일을 ARM 기반 보드인 라즈베리파이에서는 실행할 수 없는게 당연하다

 

실제로 라즈베리파이에서 main.c를 컴파일하고 실행하면 잘 된다

컴파일한 main_in_rasp을 확인하면 ARM 기계어로 컴파일 돼있다

 

리눅스에서 컴파일하고 라즈베리파이에서는 따로 컴파일 하지 않고 실행할 수는 없을까?

이럴때 사용하는게 크로스 컴파일러다

 

$ sudo apt-get install gawk git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python-setuptools python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev xterm rsync curl zstd lz4 bison flex

먼저 리눅스에서 ARM 툴체인을 설치하기 위한 의존성 패키지들을 설치한다

 

$ sudo apt install crossbuild-essential-armhf

ARM 툴체인도 설치한다

 

$ arm-linux-gnueabinf-gcc 파일이름

이렇게 arm용으로 컴파일하면 실행파일이 생성되고, 당연히 리눅스에서는 실행이 안된다

 

 

반응형

'임베디드 > Linux BSP' 카테고리의 다른 글

디바이스 파일  (0) 2024.03.06
디바이스 드라이버  (1) 2024.03.05
NFS 파일 공유 시스템  (1) 2024.02.06
Linux SMB (samba)  (1) 2024.02.04
리눅스와 라즈베리파이를 ssh으로 접속하기  (0) 2024.02.03