본문 바로가기

[Redis] ARM Mac(M1/M2)에서 컴파일 에러(stat64/fstat64) 해결하기

@bum0w02025. 8. 21. 19:15

개발자를 위한 레디스 2장 스터디를 진행하던 중, 소스 파일을 직접 빌드하여 Redis를 설치하는 과정(Redis 소스를 make로 컴파일할 때)에서 예상치 못한 컴파일 에러가 발생했습니다. 이 글에서는 해당 문제를 해결한 과정을 정리합니다. 사용한 Redis 버전은 7.0.8이며, 실습 환경은 macOS(M2 Pro)입니다.

 

발생한 에러

ARM 기반 Mac(M1, M2 등)에서 Redis를 빌드하려고 할 때 컴파일 에러가 발생하는 경우가 있습니다.

대표적인 에러 메시지는 다음과 같습니다.

$ replication.c:1565:31: error: variable has incomplete type 'struct stat64'
$ replication.c:1614:21: error: call to undeclared function 'fstat64'; ISO C99 and later do not support implicit function declarations

 

원인

Redis 소스 코드에서 사용하는 stat64와 fstat64 함수가 macOS 10.15 (Catalina) 이상에서는 더 이상 지원되지 않습니다. 즉, ARM Mac에서 Redis를 컴파일하려고 할 때, 오래된 함수 사용 때문에 발생하는 문제입니다.

 

Redis 저장소의 이슈 페이지

https://github.com/redis/redis/issues/12585

 

Build Issue in arm · Issue #12585 · redis/redis

Getting exceptions while building Redis in Mac M1. exception replication.c:1617:31: error: variable has incomplete type 'struct stat64' struct redis_stat buf; ^ replication.c:1617:20: note: forward...

github.com

 

해결 방법

a/src/config.h는 이전 버전, b/src/config.h는 수정된 버전

 

변경 내용 : config.h 파일에 #define _DARWIN_C_SOURCE 추가

  • #define _DARWIN_C_SOURCE는 macOS에서 POSIX와 일부 비표준 기능을 활성화시키는 매크로
  • 이를 정의하면 macOS에서 stat, fstat 같은 함수와 구조체를 정상적으로 사용할 수 있음

 macOS 환경에서 Redis 소스를 M1/M2 같은 ARM 아키텍처 포함으로 빌드할 때 필요

 

 

1. config.h 파일을 수정해 macOS에서 최신 함수로 동작하도록 설정

Redis를 소스에서 빌드하면 `src/` 디렉토리에 핵심 소스 파일들이 들어 있습니다.  

문제가 된 `config.h` 파일도 `redis-7.0.8/src/config.h` 경로에 위치합니다.  

 

 

2. 아래 코드 추가 (기존 `#ifdef __APPLE__` 구문 아래쪽에 붙여 넣기)

  • #define _DARWIN_C_SOURCE

 

3. 빌드 및 실행

 

Redis를 다시 빌드하기 전에 기존 빌드 파일들을 정리합니다. (필요 시)

$ make clean

 

Redis 재빌드 및 설치

// $HOME/redis/bin 디렉토리에 redis-server, redis-cli 실행 파일이 설치됨. 경로는 자유롭게 설정
$ make
$ make PREFIX=$HOME/redis install

 

어디서든 실행 가능하게 설정

// 터미널 어디서든 redis-server를 실행할 수 있도록 PATH 환경 변수를 추가합니다.
$ echo 'export PATH=$HOME/redis/bin:$PATH' >> ~/.zshrc
$ source ~/.zshrc

 

실행 확인

bum0w0
@bum0w0 :: bum0w0 님의 블로그

bum0w0 님의 블로그 입니다.

목차