개발/Python

실리콘 맥에서 no library called cairo-2 was found 에러 나올 때

nyukist 2023. 3. 19. 17:37

파이썬으로 svg 가져와 작업을 해주기 위해 cairosvg 라이브러리를 설치했는데 다음과 같은 에러가 나오는 경우가 있었다.

 

OSError: no library called "cairo-2" was found
no library called "cairo" was found
no library called "libcairo-2" was found
cannot load library 'libcairo.so.2': dlopen(libcairo.so.2, 0x0002): tried: 'libcairo.so.2' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcairo.so.2' (no such file), '/usr/lib/libcairo.so.2' (no such file, not in dyld cache), 'libcairo.so.2' (no such file), '/usr/local/lib/libcairo.so.2' (no such file), '/usr/lib/libcairo.so.2' (no such file, not in dyld cache)
cannot load library 'libcairo.2.dylib': dlopen(libcairo.2.dylib, 0x0002): tried: 'libcairo.2.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcairo.2.dylib' (no such file), '/usr/lib/libcairo.2.dylib' (no such file, not in dyld cache), 'libcairo.2.dylib' (no such file), '/usr/local/lib/libcairo.2.dylib' (no such file), '/usr/lib/libcairo.2.dylib' (no such file, not in dyld cache)
cannot load library 'libcairo-2.dll': dlopen(libcairo-2.dll, 0x0002): tried: 'libcairo-2.dll' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcairo-2.dll' (no such file), '/usr/lib/libcairo-2.dll' (no such file, not in dyld cache), 'libcairo-2.dll' (no such file), '/usr/local/lib/libcairo-2.dll' (no such file), '/usr/lib/libcairo-2.dll' (no such file, not in dyld cache)

 

원인

 

M1 M2 등의 실리콘 맥에서 실리콘용 homebrew를 사용할 때 저 에러가 나올 수 있는데,

실제 homebrew의 경로가 아닌 intel 기반일 때의 경로로 찾는 것이 문제였다. 

 

(전부 네이티브로 돌리고 싶은 마음에 실리콘용 homebrew 설치하고, terminal이나 모든 툴도 로제타 안돌리고.. 최대한 네이티브로 돌리려할 때 나올 수 있는 에러로 이전에도 한두번 겪었다ㅋ)

 

해결방법

 

크게 터미널과 homebrew를 다시 intel 용으로 설치하는 방법과 심링크(심볼릭링크)로 연결해주는 방법이 있는데 내 경우에는 이미 지금 세팅에 맞게 많은 라이브러리들을 쓰고 있기도 하고 웬만하면 애플 실리콘으로 돌릴거라 심링크를 만들어 해결했다.

 

  1.  에러로그에 없다고 나오는 파일들이 /opt/homebrew/lib 에 있는지 확인하면 libcairo.2.dylib 만 있을 것이다.

 

$ cd /opt/homebrew/lib
$ ls -al | grep cairo

  

 

  2.  우선 이 파일에 대한 심링크를 만들기위해 에러로그에서 찾으려하는 /usr/local/lib/ 위치에 심링크를 만들어주자.

 

$ cd /usr/local/lib
$ sudo ln -s /opt/homebrew/lib/libcairo.2.dylib

 

그러더니 이렇게만 하니 에러없이 동작되었다! 🙌🏻

 

 


+ 추가

 

만약, 그래도 여전히 문제가 같다면

에러로그에 있던 다른 경로에서도 심링크를 만들어주면 해결이 된다.

 

cannot load library 'libcairo.2.dylib': dlopen(libcairo.2.dylib, 0x0002): tried: 'libcairo.2.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibcairo.2.dylib' (no such file), '/usr/lib/libcairo.2.dylib' (no such file, not in dyld cache), 'libcairo.2.dylib' (no such file), '/usr/local/lib/libcairo.2.dylib' (no such file), '/usr/lib/libcairo.2.dylib' (no such file, not in dyld cache)

 

하지만 에러로그를 잘 보면 libcairo.2.dylib 가 아니라 OSlibcairo.2.dylib 라는 이름으로 되어있어서

심링크를 만들고 이름을 바꾸어주면 된다.

 

$ cd /System/Volumes/Preboot/Cryptexes
$ sudo ln -s /opt/homebrew/lib/libcairo.2.dylib
$ mv libcairo.2.dylib OSlibcairo.2.dylib