Software Workshop

pip install 실행 중에 이런 에러가 발생할 수 있다.

ld: library not found for -lintl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
*** error linking uWSGI ***

python 모듈을 빌드하다가 C로 만들어진 라이브러리에 의존하는데, 특정 라이브러리의 경로를 찾지 못해 빌드가 실패하는 것이다. (여기서 특정 라이브러리는 intl 라이브러리(gettext 라이브러리)를 뜻함)

이 문제는 환경변수를 설정함으로써 해결할 수 있다.

라이브러리 패키지가 설치되어 있을 경우, 다음 설정으로 해결

예시

export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/opt/homebrew/lib
export LDFLAGS="-L/usr/lib -L/usr/local/lib -L/opt/homebrew/lib"

intl 라이브러리가 실제로 포함된 경로는 시스템마다 다르기 때문에 본인이 직접 찾아봐야 한다. 다음 명령을 이용해서 라이브러리 설치 경로를 확인할 수 있고 위의 환경변수 설정처럼 콜론 기호(:)를 구분자로 해서 추가해주면 된다.

find / -name "libintl*.so*"

.bashrc나 .zshrc 등의 설정파일에 적어두고, pip install을 실행하려는 현재 작업 shell에서도 한 번 실행해줄 필요가 있다.

source ~/.bashrc
또는
source ~/.zshrc

사실 LDFLAGS 환경변수만 선언해도 빌드는 성공하지만, 실행 중에 동적으로 라이브러리를 로드해야 할 때 경로를 찾지 못해 에러가 발생하는 것을 막으려면 두 가지 환경변수를 모두 설정해주는 게 안전하다.

그리고 M1 macbook의 경우에는 /opt/homebrew/lib에 패키지가 설치되므로 이 경로를 반드시 추가하는 게 바필요하다. (일반적으로 Intel macbook이나 Linux의 경우에는 /usr/lib과 /usr/local/lib으로 충분하다.)

라이브러리 패키지가 설치되어 있지 않을 경우, 설치가 필요함

위의 내용은 이미 해당 라이브러리 패키지가 설치되어 있다는 가정 하에, 그 패키지를 사용할 수 있도록 설정하는 것을 다루고 있다. 해당 라이브러리 패키지가 설치되어 있지 않다면? 다음 내용을 참고하면 된다.

zlib 설치하기

macOS에서

brew install zlib

Linux에서는

sudo apt install zlib1g-dev

libxml 설치하기

macOS에서

brew install libxml2

Linux에서

sudo apt install libxml2

libssl 설치하기

macOS에서

brew install openssl@1.1 openssle@3

Linux에서

sudo apt install libssl-dev