공부/이모저모

Ubuntu에서 sys/syscall.h: No such file or directory 해결

JUNFUTURE 2024. 3. 13. 11:14

위와 같이 -m32 옵션을 주어 32비트로 바이너리를 컴파일하려고할때

다음과 같이 오류가 발생하는 경우가 있다.

fatal error: sys/syscall.h: No such file or directory
    1 | #include <sys/syscall.h>
      |          ^~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:13: shellcode.o] Error 1

 

sys/syscall.h는 리눅스의 표준 C라이브러리의 일부이기 때문에 윈도우에서 실행했을때는 해당 라이브러리를 못찾을 수 있지만, 우분투에서 찾지못하는건 상당히 당황스럽다.

 

우분투에서 우분투의 표준 C 라이브러리가 설치되지않은 상황이기때문에, 이를 적절히 설치해주면된다. 

 

 

64비트의 경우 : 

64비트 시스템에서 32비트 어플리케이션을 컴파일하고 링크하려면, build-essential 패키지 외에도 추가로 gcc-multilib와 g++-multilib (또는 특정 시스템에 따라 libc6-dev-i386 등) 같은 멀티아키텍처 지원 패키지를 설치해야한다. 

sudo apt-get update
sudo apt-get install build-essential

 

32비트의 경우 : 

m32 플래그를 사용하여 32비트 모드로 컴파일하려 할 때, 해당 라이브러리가 시스템에 설치되어 있지 않으면 이러한 오류가 발생할 수 있다.

sudo apt-get update
sudo apt-get install gcc-multilib g++-multilib libc6-dev-i386

 

결론 :

Ubuntu에서 32비트 컴파일을하려할때 sys/syscall.h No such file or directory Error가 발생할때 -> build-essential을 설치해도 못찾을 수 있는데 -> 이때 추가로 gcc-multilib와 g++-multilib (또는 특정 시스템에 따라 libc6-dev-i386 등) 같은 멀티아키텍처 지원 패키지를 설치해야한다.