LainyZine: 프로그래머 가이드 🐣

맥 Big Sur에서 Ruby ffi 젬 설치할 때 빌드 실패 대처 방법

FFI는 Foreign Function Interface의 줄임말로, Ruby-FFI는 다른 언어의 동적 링크 네이티브 라이브러리를 읽어와서 루비 코드로 실행할 수 있게 해주는 라이브러리입니다.

macOS Big Sur나 애플 실리콘(m1) 맥에서는 ffi 설치할 때 네이티브 빌드 문제가 발생하곤 합니다. 이 글에서는 이 문제를 해결하는 방법에 대해서 알아봅니다.

Ruby FFI 설치 중에 네이티브 빌드 실패할 때 해결 방법

첫 번째 방법은 ‘~> 1.13’ 버전을 사용하는 것입니다.

네이티브 빌드가 있는 젬 패키지는 설치 이슈가 많이 발생합니다. 2021년 6월 현재 Ruby FFI 최신 버전은 1.15.3 버전으로 arm64 아키텍처로 빌드된 Ruby 2.7.2나 Ruby 3.0.0에서 설치 문제가 발생하지 않습니다. 확인한 바에 따르면 1.13 이후 버전을 설치하는 경우에는 따로 설정을 하지 않더라도 네이티브 빌드 중에 에러가 발생하지 않습니다.

하지만 의존성 문제 등으로 어쩔 수 없이 구 버전 FFI를 사용해야하는 경우가 있습니다. 이 때는 다음 옵션을 사용하면 대체로 해결되는 것으로 보입니다.

--with-cflags=-Wno-implicit-function-declaration

이 옵션을 사용하는 방법은 gembundle에서 조금 다릅니다. 먼저 Gem에서 이 옵션을 적용하려면 다음과 같이 실행합니다. 이 예제에서는 이 옵션 없이 설치할 때 에러가 발생하는 FFI 1.9.25 버전을 설치해봅니다.

$ gem install ffi -v 1.9.25 -- --with-cflags=-Wno-implicit-function-declaration

다음으로 bundle에서 적용하고 싶다면 bundle config로 옵션을 설정한 다음 FFI를 설치합니다.

$ bundle config build.ffi -- --with-cflags=-Wno-implicit-function-declaration
$ bundle install

bundle config로 설정한 내용은 ~/.bundle/config에 저장 되니 참고해주세요.

$ cat ~/.bundle/config
---
BUNDLE_BUILD__FFI: "--with-cflags=-Wno-implicit-function-declaration"

다른 Gem에서 네이티브 빌드를 할 때도 추가 옵션을 적용할 때 사용할 수 있는 방법이니, 알아두면 편리합니다.

추천 문서

LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.