تجاهل ld_library_path والعصا مع المكتبة المقدمة من خلال -rapath في الوقت الرابط

StackOverflow https://stackoverflow.com/questions/2408172

  •  18-09-2019
  •  | 
  •  

سؤال

أنا جالس في بيئة ليس لدي أي سيطرة حقيقية (ليس لي فقط، لذلك في الأساس، لا يمكنني تغيير البيئة أو لن تعمل من أجل أي شخص آخر)، والشيء الوحيد الذي يمكنني التأثير عليه هو كيف بنيت ثنائية.

مشكلتي هي أن البيئة تحدد ld_library_path تحتوي على libstdc ++ وهذا غير متوافق مع المترجم المستخدم. حاولت تجميعها بشكل ثابت، ولكن هذا لا يبدو ممكنا ل G ++ (الإصدار 4.2.3، كان يعمل في هذا الاتجاه في الإصدارات اللاحقة على الرغم من عدم توفرها، أو libstdc ++ أو شيء من هذا القبيل).

لقد وصلت الآن إلى استخدام RETH لإخبز اسم المسار المطلق في الملف القابل للتنفيذ (ستعمل، جميع الأجهزة التي من المفترض أن تعمل متطابقة). لسوء الحظ، يبدو الأمر كما لو أن LD_LIBRARY_PATH الأسبقية على Reath (إعادة تعيين LD_Library_Path أكد أنه قادر على العثور على المكتبة، ولكن كما هو مذكور أعلاه، سيتم تعيين LD_LIBRARY_PATH للجميع، ولا يمكنني تغيير ذلك).

هل هناك أي طريقة يمكنني أن أجعلها من الأسبقية على LD_LIBRARY_PATH، أو هل هناك أي حلول محتملة أخرى لمشكلتي؟ لاحظ أنني أتحدث عن الارتباط الديناميكي في وقت التشغيل، وأنا قادر على التحكم في سطر الأوامر في ترجمة الوقت وربط الوقت.

شكرا.

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

المحلول

ربط ضد libstdc++.a هو بالتأكيد ممكن، وإن كان صعبة. تعليمات هنا.

أنا متشكك قليلا من مطالبتك ذلك LD_LIBRARY_PATH لها الأسبقية على "خبز" DT_RPATH على الرغم من - على الأقل على لينكس و (أعتقد) سولاريس، LD_LIBRARY_PATH ينظر فقط إلى بعد DT_RPATH فشل البحث.

نصائح أخرى

ربما يمكنك استخدام غلاف شل الذي يعدل البيئة لهذا البرنامج فقط؟

#!/bin/sh

LD_LIBRARY_PATH="/path/to/your/lib:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH
exec /path/to/binary $@

يجب أن يؤدي ذلك إلى التحميل LD_LIBRARY_PATH قبل التنفيذ ثم استبدال المجمع ب Binary عبر Exec.

هل هذه المساعدة؟

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