مقدمة: الألم المألوف لكل مطور على Mac
\n\nكنت تقوم بتحديث Node.js عبر Homebrew، ثم قمت بتشغيل سكريبت PHP المفضل لديك — وفجأة ترى هذه الرسالة المروعة:
\n\ndyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n Referenced from: /usr/local/bin/php\n Reason: image not found\n\nهدوء، فقط هدوء! إذا وصلت إلى هذه الصفحة، فأنت لست أول ولا آخر مطور يواجه هذا الخطأ. على Stack Overflow، حصد هذا السؤال آلاف المشاهدات، وليس من دون سبب: المشكلة تنشأ بسبب تعارض إصدارات مكتبة ICU4C (International Components for Unicode for C) بعد تثبيت أو تحديث Node.js عبر Homebrew.
\n\nفي هذا الدليل، سأعرض لكم ثلاث طرق عملية لإصلاح الخطأ، وسأشرح جذره، وسأقدم توصيات مفيدة حتى لا تروا هذه الرسالة مرة أخرى. هيا بنا!
\n\nلماذا يحدث خطأ dyld: Library not loaded؟
\n\nقبل أن نبدأ في الإصلاح، دعنا نفهم الأسباب. سيساعدك هذا على فهم أفضل للنظام البيئي لـ macOS و Homebrew.
\n\nما هي ICU4C وما علاقتها بـ PHP؟
\n\nICU4C هي مكتبة لدعم Unicode، التدويل والتوطين. يستخدمها PHP للعمل مع دوال مثل mb_convert_encoding()، وامتداد intl وغيرها. يقوم Homebrew بتثبيت ICU4C كاعتماد للعديد من الحزم، بما في ذلك PHP و Node.js.
سلسلة الأحداث المؤدية إلى الخطأ
\n\n- \n
- تقوم بتثبيت أو تحديث Node.js عبر
brew install nodeأوbrew upgrade node. \n - يتطلب Node.js إصداراً معيناً من ICU4C (مثل 62.x). \n
- يقوم Homebrew بتحديث ICU4C إلى إصدار جديد (مثل 63.x أو 64.x). \n
- تتم إزالة المكتبة القديمة
libicui18n.62.dylib. \n - PHP، الذي تم تجميعه مع الإصدار 62، لا يمكنه العثور على المكتبة المطلوبة — ويتعطل مع الخطأ. \n
ببساطة: PHP بقي "في الماضي"، بينما المكتبات أصبحت "في المستقبل".
\n\nالطريقة 1: حل سريع — إعادة ربط ICU4C (موصى به للمبتدئين)
\n\nهذه هي الطريقة الأسهل والأسرع، والتي تحل المشكلة في 90% من الحالات.
\n\nالخطوة 1: تحقق من الإصدار الحالي لـ ICU4C
\n\nافتح الطرفية (Terminal) ونفّذ:
\n\nbrew list --versions icu4c\n\nسترى شيئاً مثل icu4c 63.1 أو 64.2. تذكر الإصدار — ستحتاجه.
الخطوة 2: أعد ربط ICU4C مع PHP
\n\nنفّذ الأمر لإعادة الربط:
\n\nbrew link --force icu4c\n\nإذا رأيت تحذيراً بأن الإصدارات غير متطابقة — لا تقلق. هذا طبيعي. ثم أعد تشغيل PHP:
\n\nwhich php\nphp -v\n\nإذا اختفى الخطأ — أحسنت! إذا لم يختفِ — انتقل إلى الطريقة التالية.
\n\nالخطوة 3: بديل — إعادة الربط القسري
\n\nإذا لم يعمل الأمر أعلاه، جرب:
\n\nbrew reinstall icu4c\nbrew link --overwrite icu4c\n\nسيؤدي هذا إلى إعادة تثبيت المكتبة وتحديث جميع الروابط.
\n\nالطريقة 2: إعادة تثبيت PHP عبر Homebrew (لمن يحبون النظافة)
\n\nإذا لم تساعد إعادة الربط — فهذا يعني أن PHP الخاص بك "مُخيط" تحت الإصدار القديم من ICU4C. أفضل حل هو إعادة تثبيت PHP.
\n\nالخطوة 1: احذف الإصدار الحالي من PHP
\n\nbrew uninstall php\n\nإذا كان لديك عدة إصدارات من PHP (مثل 7.4 و 8.0)، احذفها جميعاً:
\n\nbrew uninstall php@7.4 php@8.0\n\nالخطوة 2: نظف ذاكرة التخزين المؤقت لـ Homebrew
\n\nbrew cleanup\n\nالخطوة 3: أعد تثبيت PHP من جديد
\n\nbrew install php\n\nأو، إذا كنت بحاجة إلى إصدار معين:
\n\nbrew install php@8.1\n\nالخطوة 4: تحقق من قابلية التشغيل
\n\nاكتب سكريبت PHP بسيط للتحقق: