반응형
크로스 컴파일러란 컴파일한 플랫폼이 아닌, 다른 플랫폼에서 프로그램을 실행할 수 있도록 실행 파일을 생성하는 컴파일러이다
무슨 말인지 모르겠으니, 밑에 예시를 작성했다


리눅스에서 간단하게 코드 작성 후 컴파일 하고 실행해보자
잘 나오는 걸 확인할 수 있다

해당 파일을 우분투 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 |