سؤال

أقوم بإنشاء تطبيق مكون إضافي (dylib) يعتمد على العديد من المكتبات الأخرى. يتم تثبيت هذه المكتبات الأخرى على نظامي ، ولكن ليس مضمونة لتثبيتها على أي نظام لأي مستخدم. لذلك أنا بحاجة إلى العثور على طريقة حزمة التبعيات جنبا إلى جنب مع طلبي.

لقد وجدت أنه يمكنني استخدام otool لإدراج أو تغيير المسارات إلى dylibs الأخرى. هذا من شأنه أن يسمح بإنشاء مجلد يحدد تطبيق البرنامج المساعد وجميع التبعيات اللازمة.

ومع ذلك ، فإن القيام بذلك يدويًا يبدو وكأنه مهمة تستغرق وقتًا طويلاً وغبيًا. هل هناك مرافق متاحة لأتمتة؟

أو ربما أفعل ذلك بشكل خاطئ وهناك نهج أفضل وأكثر وضوحًا لهذه المشكلة؟

تعديللقد خلقت أ النصي أن أتمتة معظم المهمة.

هل كانت مفيدة؟

المحلول

استخدم المسارات النسبية في dylib باستخدام install_name_tool. وبهذه الطريقة يمكنك ضبطها مرة واحدة ، وتثبيت هذا الدليل في أي مكان دون الحاجة إلى تعديل مكتباتك في وقت التثبيت.

يجب عليك وضع جميع تبعيات Dylib الخاصة بك في مجلد واحد ، ثم استخدم install_name_tool لتعيين الموقع النسبي لل dylibs الأخرى التي تعتمد عليها. افترض أن مكتبتك libmyfoo.dylib تعتمد على libbar.dylib:

install_name_tool -change "/Whatever/full/path/libbar.dylib" "@loader_path/libbar.dylib" libmyfoo.dylib

وبهذه الطريقة ، ستبحث مكتبتك دائمًا عن libbar.dylib في نفس الدليل حيث يوجد libmyfoo.dylib.

قد تحتاج أيضًا إلى تشغيل install_name_tool على بعض dylibs الأخرى ، إذا كانت تعتمد على بعضها البعض.

احذر ، وثائق ل install_name_tool يشير إلى أنه "لكي تعمل هذه الأداة عندما تكون أسماء التثبيت أو RPTHS أكبر ، يجب بناء ثنائي مع خيار LD (1) -headerpad_max_install_names." ، لذا تأكد من تضمين -headerpad_max_install_names خيار سطر الأوامر عند بناء مكتبتك.

@loader_path نسبة إلى الثنائي المستخدم لتحميل dylib ، في هذه الحالة libmyfoo.dylib. يستخدم @executable_path إذا كنت ترغب في العثور على المكتبات المتعلقة بالتنفيذ التي بدأت تسلسل تحميل المكتبة.

نصائح أخرى

لإكمال إجابة كريستوفر ، إليك بعض الروابط للموارد المفيدة:

Macdylibbundler هي أداة صغيرة مفيدة تفعل بالضبط ما يطلب. من المؤكد أنها أنقذت حياتي عند توزيع الثنائيات على OSX.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top