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
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