개발자를 위한 레디스 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
해결 방법

변경 내용 : 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
실행 확인
