سؤال

لا بد لي من بناء دفعة خارج شجرة الدليل "المعتادة" (أي ، /custom/dir بدلاً من /usr) ، وهي ليست مشكلة كبيرة: فقط مرور --prefix=/custom/path ل ./runscript.sh / ./bjam, ، وهناك تذهب.

او كذلك ظننت انا.

المشكلة هي أن بعض مكتبات التعزيز تعتمد على بعضها البعض ، و - باستخدام عملية الإنشاء الافتراضية التي تمر بها ./bootstrap.sh / ./bjam - يبدو أن --prefix لا تتم إضافة المسار إلى مسار البحث في المكتبة عن libs التعزيز ، أي لا -Wl,-rpath يتم تطبيقه. هذا يعني أن تعزيز المكتبات اعتمادًا على مكتبات التعزيز الأخرى لا يمكنها العثور على تلك الموجودة في وقت التشغيل.

طلبي - ربط هؤلاء /custom/path تعزيز المكتبات - فشل بالفعل في ./configure مرحلة لأن libboost_filesystem.so غير قادر على إيجاد libboost_system.so, بالرغم من لقد نجحت -Wl,-rpath=/custom/path/boost/lib إلى خط المترجم الخاص بي (أي المسار الصحيح إلى LIBS ، قمت بالتحقق من ذلك libboost_system.so هل هناك).

الآن ، لتجنب الأساليب الثقيلة مثل الإعداد LD_LIBRARY_PATH, ، أرغب في بناء دفعة بطريقة ما بحيث يكون لجميع مكتبات Boost مسار البحث المناسب عن LIBs المعززة الأخرى التي تم تجميعها فيها. ومع ذلك ، لم أتمكن من العثور على الإجراء المناسب لذلك. أي شخص يمكن أن تساعدني؟

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

المحلول

كنت بحاجة إلى القيام بذلك مؤخرًا لمشروع آخر ، على الرغم من أنني بحاجة إلى استخدام $ Origin لجعل المسار بالنسبة لموقع الكائنات المشتركة لـ Boost.

هذا يتطلب ما يلي على سطر أوامر باش:

./b2 hardcode-dll-paths=true dll-path="'\$ORIGIN/../lib'" --prefix=$MY_PREFIX install

إن اكتشاف المجموعة السحرية من الشخصيات للحصول على هذا الأصل $ الذي تم وضعه بشكل صحيح في الكائن المشترك استغرق بعض التجربة والخطأ ، لذلك آمل أن يساعد كتابة الإجابة هنا على تجنب التناهيض مع هذا.

نصائح أخرى

يمكنك إضافة خيارات برنامج التحويل البرمجي والرابط أثناء الإنشاء من سطر الأوامر مع:

bjam hard-code-dll-path=true dll-path=/custom/path

يوجد عنصر الأسئلة الشائعة في مستندات Boost Build حول هذا (انظر مستندات B2).

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