كيفية إصلاح dyld: Library not loaded: libicui18n.62.dylib على Mac بعد تثبيت Node عبر Brew

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: عندما يتوقف PHP عن التعاون مع Homebrew

\n\n

هل سبق لك أن واجهت موقفًا حيث كان كل شيء يعمل بشكل مثالي، ثم فجأة! يتسبب نص PHP المفضل لديك في ظهور خطأ يجعلك تشعر بالذعر؟ إذا كنت مطورًا على macOS وقمت مؤخرًا بتثبيت Node.js عبر Homebrew، فمن المحتمل أنك رأيت هذه الرسالة المخيفة:

\n\n
dyld: 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

لا داعي للذعر! هذه ليست نهاية العالم، بل مجرد تعارض في إصدارات مكتبة ICU4C (International Components for Unicode for C). هذا الموقف شائع جدًا لدرجة أن هذا السؤال حصد آلاف المشاهدات على Stack Overflow. اليوم سنفهم لماذا يحدث هذا، والأهم من ذلك، كيفية إصلاحه نهائيًا.

\n\n

لماذا يحدث خطأ libicui18n.62.dylib؟

\n\n

دعنا نفهم الآلية. ICU4C هي مكتبة لدعم Unicode، يستخدمها PHP للعمل مع التدويل (وظائف مثل intl و mbstring وغيرها). عندما تقوم بتثبيت PHP عبر Homebrew، فإنه يرتبط بإصدار معين من ICU4C كان ساريًا وقت التثبيت.

\n\n

تنشأ المشكلة عندما تقوم بتثبيت (أو تحديث) Node.js عبر Brew. يعتمد Node.js أيضًا على ICU4C، وقد يقوم Brew بتحديث هذه المكتبة إلى إصدار جديد، مع حذف الإصدار القديم. نتيجة لذلك، يظل PHP مع "رابط ميت" للملف libicui18n.62.dylib الذي لم يعد موجودًا. ومن هنا يأتي الخطأ:

\n\n
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
\n\n

في جوهره، هذا تعارض كلاسيكي في التبعيات. لكن الخبر السار: هناك حل، وهو بسيط جدًا.

\n\n

طرق الحل: من البسيط إلى الموثوق

\n\n

الطريقة 1: إعادة ربط ICU4C (إصلاح سريع)

\n\n

أسرع طريقة هي "تذكير" PHP بمكان المكتبة الآن. يقوم Homebrew بتخزين الإصدار الحالي من ICU4C في مكان آخر، لكن يمكننا إنشاء رابط رمزي.

\n\n
    \n
  1. أولاً، تعرف على إصدار ICU4C المثبت حاليًا:
  2. \n
\n\n
brew list --versions icu4c
\n\n

سترى شيئًا مثل icu4c 72.1 (قد يختلف رقم الإصدار).

\n\n
    \n
  1. الآن، لننشئ الدليل الذي يبحث عنه PHP، وننشئ رابطًا رمزيًا:
  2. \n
\n\n
sudo mkdir -p /usr/local/opt/icu4c/lib\nsudo ln -s /usr/local/Cellar/icu4c/72.1/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib
\n\n

هام: استبدل 72.1 بإصدار ICU4C الخاص بك. إذا كان الإصدار 73.0، فستكون الأمر كالتالي:

\n\n
sudo ln -s /usr/local/Cellar/icu4c/73.0/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib
\n\n

تحقق من عمل PHP:

\n\n
php -v
\n\n

إذا رأيت إصدار PHP بدون أخطاء - تهانينا، لقد نجحت! لكن هذا حل مؤقت. عند التحديث التالي لـ ICU4C، سينكسر الرابط مرة أخرى.

\n\n

الطريقة 2: إعادة تثبيت PHP عبر Brew (موصى به)

\n\n

النهج الأكثر صحة هو إجبار PHP على إعادة البناء مع الإصدار الحالي من ICU4C. سيستغرق هذا وقتًا أطول قليلاً، لكنه سيحل المشكلة من جذورها.

\n\n
    \n
  1. أولاً، قم بإزالة الإصدار الحالي من PHP (إذا كان موجودًا):
  2. \n
\n\n
brew uninstall php
\n\n
    \n
  1. ثم أعد تثبيت PHP، مع الإشارة صراحةً إلى استخدام الإصدار الحالي من ICU4C:
  2. \n
\n\n
brew install php
\n\n

سيقوم Homebrew بسحب أحدث إصدار من ICU4C وإعادة بناء PHP مع الروابط الصحيحة. بعد التثبيت، تحقق:

\n\n
php -v\nphp -m | grep intl
\n\n

يجب أن تكون الوحدة intl في القائمة. إذا لم تكن كذلك - قد تحتاج إلى تمكينها يدويًا في php.ini، لكن عادةً ما يقوم Brew بذلك تلقائيًا.

\n\n

الطريقة 3: تثبيت إصدار معين من ICU4C

المدونات

توصيات الكتب