Solusi untuk error “Library not loaded: …/libclntsh.dylib.11.1\n” saat memasang PHP dengan oci8 di Mac OS Sierra

1 minute read

Wow judulnya panjang banget. Apalagi kalau pesan error utuhnya dimasukin bisa habis satu layar buat judul artikelnya saja 😂. Jadi ceritanya saat selesai compile module oci8 untuk PHP pas restart Apache ada error seperti ini:

Eh iya perlu dipaste juga yah disini biar diarsip Mbah Google 😉.

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php56/5.6.30_6/lib/php/extensions/no-debug-non-zts-20131226/oci8.so' - dlopen(/usr/local/Cellar/php56/5.6.30_6/lib/php/extensions/no-debug-non-zts-20131226/oci8.so, 9): Library not loaded: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1\n Referenced from: /usr/local/Cellar/php56/5.6.30_6/lib/php/extensions/no-debug-non-zts-20131226/oci8.so\n Reason: image not found in Unknown on line 0

Hmm Apache engga bisa nge-load file oci8.so-nya 🤔.

Dugaan pertama file oci8.so nya engga ada. Tapi setelah dicek ternyata ada. Permission-nya juga OK. Kemudian dugaan selanjutnya direktori library path nya engga ke load. Nah disini mulai liar karena menambah path ke Apache engga semudah sudo vi namafile terus save, karena di Mac OS ada sistem penanganan proteksi file OS, seperti SELinux. Harus reboot recovery terus dimatikan dengan command csrutil disable. Beres kan? Ternyata masih error juga. Kurang lebih 3 jam dihabiskan sampai proses ini 😓.

Setelah bertab-tab stackoverflow dan artikel blog belum nemu yang pas, dicoba dibaca lagi errornya, untuk mendapatkan perspektif baru, karena mungkin aja salah mengira masalahnya sebenarnya ada dimana. Setelah diamati lagi baru sadar dengan pesan ini “Library not loaded: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib”. Lho ini file dimana? Jelas-jelas di Mac OS engga ada mount /ade. Harusnya dia mencari file libnnz11.dylib itu di direktori instant clientnya.

Bismillah coba googling lagi dengan keyword baru. Akhirnya ketemu permasalahan yang mirip, dan solusinya yaitu menggunakan command install_name_tool untuk merubah referensi yang salah itu. Jadi untuk error diatas, referensi path /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 harus dirubah menjadi /Library/Oracle/instantclient/11.2.0.4/libclntsh.dylib.11.1 dengan command:

sudo install_name_tool -change /Library/Oracle/libclntsh.dylib.11.1 /Library/Oracle/instantclient/11.2.0.4/libclntsh.dylib.11.1 /usr/local/Cellar/php56/5.6.30_6/lib/php/extensions/no-debug-non-zts-20131226/oci8.so

Nah beres kan? Masih error juga, tapi dengan referensi path yang berbeda:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php56/5.6.30_6/lib/php/extensions/no-debug-non-zts-20131226/oci8.so' - dlopen(/usr/local/Cellar/php56/5.6.30_6/lib/php/extensions/no-debug-non-zts-20131226/oci8.so, 9): Library not loaded: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib\n Referenced from: /Library/Oracle/instantclient/11.2.0.4/libclntsh.dylib.11.1\n Reason: image not found in Unknown on line 0

Nah kali ini bukan di file oci8.so tapi di file /Library/Oracle/instantclient/11.2.0.4/libclntsh.dylib.11.1. Jadi gunakan lagi install_name_tool:

sudo install_name_tool -change /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib /Library/Oracle/instantclient/11.2.0.4/libnnz11.dylib /Library/Oracle/instantclient/11.2.0.4/libclntsh.dylib.11.1

Restart Apache lagi dan Alhamdulillah kali ini bebas error!

Dicek dengan phpinfo() juga oci8 sudah sukses di load.

Semoga bermanfaat.

Comments