error일지

[PHP]macOS :: Unable to load dynamic library 'mbstring'

rachel_13 2022. 7. 26. 16:02

extensiont_dir 경로에 .so 파일이 없음.

https://www.inflearn.com/questions/587904

pecl에서 라이브러리 지원여부 확인 가능 :  https://pecl.php.net

ㄴ 번외) 확인해본 이유를 설명하자면,,, 익스텐션이 없어서 sudo pecl install `패키지명` 으로 설치해보려다가 더 이상 라이브러리 지원을 안한다고 해서 설치에 실패했기 때문이다...

 

여러 링크들을 참고해서 시도해보았지만, 여전히 익스텐션이 제대로 설치되지 않았다. 😢

그래서 처음부터 차근차근 다시 해보려고 한다. 

이 글은, pecl 에 필요한 확장이 포함되지 않은 경우 해결하는 방법이다.

 

1. 내 로컬에서 설치된 php 버전을 정확하게 확인한다.(정확하게가 중요함)

php -v

PHP 7.4.30 (cli) (built: Jun  9 2022 09:20:03) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v3.1.5, Copyright (c) 2002-2022, by Derick Rethans
    with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies

 

나의 경우 7.4.30 버전을 사용한다.

 

2. https://www.php.net/distributions/php-7.4.30.tar.bz2

curl -O https://www.php.net/distributions/php-7.4.30.tar.bz2
tar -jxvf php-7.4.30.tar.bz2
cd php-7.4.30
cd ext /
ls
cd mbstring/

터미널에서 설치해도 되고, 위 링크를 클릭하면 바로 설치가 진행된다. 

(버전이 다르면 직접 수정하여 설치를 진행한다.)

 

3. 로컬에서 phpize 위치 찾기

locate phpize

❗️mac 에서 다음과 같은 Locate error 가 발생할 경우

WARNING: The locate database (/var/db/locate.database) does not exist.

To create the database, run the following command:

 

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

 

Please be aware that the database can take some time to generate; once

the database has been created, this message will no longer appear.

 

👉  해결방법 

터미널 새 창 열고 다음 명령어를 입력한다.
수초 안에 다시 locate 명령어를 실행하면 phpize가 있는 위치를 보여 줄 것이다.

(또는 find / -name phpize 명령어 사용해도 됨)

cd /
sudo /usr/libexec/locate.updatedb

여기서 내가 기대했던 것 /usr/local/bin 디렉토리 내에 phpize가 있는 거였는데,,, 애석하게도 없다.. ㅠ(갈길이 멀구나)

→ local에 phpize 설치하기

   :: 찾아보니까 autoconf가 있어야 하는데, 이미 xdebug 설치하면서 autoconf는 설치했었는데? 왜 없는거지..의아..🤔

   :: 쨌든 안보이니까, 다시 설치하는 방법을 알아본다.

 

일단 홈브루 쪽에서 설치되어있는 phpize로 해본다.

 

4. 설치하려는 확장 폴더에 들어가서 (ex. ~/php-7.4.30/ext/mbstring)

phpize 파일의 경로를 입력한다.

그러면 configure 스크립트가 생긴 것을 볼 수 있다.

5. 이제 .so 파일을 생성하기 위해서 php-config 의 위치를 찾는다.

마찬가지로 locate php-config에서

로컬이 아닌 홈브루 설치 경로로 실행하기로 한다. (이렇게 시도하는 이유는 phpstorm 에서 CLI interpreter 설정을 홈브루로 해놨기 때문이다. xdebug도 홈브루 경로에 설치해둬서 아까 phpize가 /usr/local/bin에 없었던게 이해가 되는 부분이다.)

 

(참고로 아직 디렉토리를 벗어나지 않았다. mbstring 디렉토리에서 configure 스크립트를 만들었고, 이 스크립트를 php-config를 이용해 현재 디렉토리 내에서 실행하는 것이다.)

./configure --with-php-config="php-config 경로"

 

6. 다음 명령어 수행

make
test
sudo make install

make 명령어 입력 후 성공시 나오는 화면

7. /modules/mbstring.so 파일 생성되었음을 알 수 있다.

=> php.ini 에서 extension_dir로 설정되어있던 확장 폴더에 mbstring.so도 같이 생긴 것을 확인할 수 있다.

phpize, php-config 모두 홈브루 경로로 실행했기 때문에, 홈브루 내에 설치된 php 의 pecl 폴더에 .so 파일이 정상적으로 설치된 것을 확인할 수 있다.

 

+) 추가

동일한 방법으로 openssl 설치 시 발생하는 에러

(*참고 : openssl 은 config0.m4로 파일이 숨겨져 있어서 cp config0.m4 config.m4를 해줘야 configure 스크립트 파일이 정상적으로 생긴다.)

 

No package 'openssl' found

 

Consider adjusting the PKG_CONFIG_PATH environment variable if you

installed software in a non-standard prefix.

 

Alternatively, you may set the environment variables OPENSSL_CFLAGS

and OPENSSL_LIBS to avoid the need to call pkg-config.

See the pkg-config man page for more details.

 

👉 해결방법

~/.zshrc 에 환경변수 추가하기

export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
export OPENSSL_CFLAGS="-I/usr/local/Cellar/openssl@1.1/1.1.1g/include"
export OPENSSL_LIBS="-L/usr/local/Cellar/openssl@1.1/1.1.1g/lib -lssl -lcrypto"

그리고 make를 했더니.. ㅂㄷㅂㄷ 또 오류가 난다.😡

👉 로컬에 있는 폴더 찾아서 통째로 복사해버림

1) 폴더 찾기

locate opensslv.h

- 폴더 경로 : /usr/local/include/node/openssl

 

2) 폴더에서 폴더 복사

cp -r 원본폴더/ 목적지폴더/

3) 오류가 바뀜 : 라이브러리 못찾음

👉 해결방법 

환경변수 추가했던 부분에서 -lssl, -lcrypto 플래그 추가한 것이 아마도 오류인것 같아서

환경변수를 수정하고 다시 make를 했었는데, 계속 안됐었다.

(삽질한 결과, 환경변수를 수정했기 때문에 어찌됐든 configure 스크립트를 다시 실행해야 했다...)

configure --with-php-config... 로 다시 스크립트 실행 -> make  -> sudo make install -> 성공!!✨

 

 

[참고 링크]

https://stackoverflow.com/questions/7250356/how-to-install-mysqli-on-macos

https://forcloud.tistory.com/57

https://gist.github.com/nolim1t/134353

https://stackoverflow.com/questions/7250356/how-to-install-mysqli-on-macos

https://www.361shipin.com/blog/1506411362287472642