كيفية الحصول على RPATH مع $ المنشأ للعمل على قانون :: كتل مجلس التعاون الخليجي؟

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

سؤال

وأنا أحاول ربط RPATH التي تحتوي على سلسلة $ خاص ORIGIN إلى ملف قابل للتنفيذ تم إنشاؤها باستخدام دول مجلس التعاون الخليجي مع قانون :: كتل IDE. لقد المحدد

-Wl,-R$ORIGIN

وفي خيارات رابط لهذا المشروع، لكن الإخراج سطر الأوامر لدول مجلس التعاون الخليجي هو الخطأ (تجريده من أجل الوضوح):

g++ -Wl,-R

ما هي الطريقة الصحيحة لتحديد هذه الحجة للقانون :: كتل؟

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

المحلول

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

في باش، تحتاج إلى عصا مائل أمام $:

-Wl,-R\$ORIGIN

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

-Wl,-R\\$$ORIGIN

... الذي النواتج:

-Wl,-R\\$ORIGIN

... إلى سجل بناء، ولكن قذيفة في الواقع يحصل المرسلة:

-Wl,-R\$ORIGIN

... التي كما ذكر أعلاه ينتج النتيجة المرجوة.

وماذا الألم.

نصائح أخرى

وبالإضافة إلى kblucks الجواب الذي يعالج مسألة لالرمز: كتل .... بالنسبة لأولئك الذين مثلي تعثرت عبر هذه الصفحة تبحث عن كيفية القيام بذلك مع صانع. هو خدعة لاستخدام علامة $ إضافية كحرف هروب وأرفق مع الاقتباس:

-Wl,-R,'$$ORIGIN/../lib'

وشرح كامل كان يمكن أن يكون هنا: عن طريق المنشأ لوقت التشغيل الديناميكي مكتبة بحث مسار

إذا ويجري بناء قابل للتنفيذ من خلال بيئة النصي معقدة ضخمة لم يخلق من قبلك، وكنت لا تريد الخوض في ذلك، في محاولة تشغيل مع setenv LD_RUN_PATH='$ORIGIN/../lib'. إذا لم يفلح ذلك، نهج عملي هو إنشاء مجمع للدينار:

#!/bin/sh
exec /usr/bin/ld -R '$ORIGIN/../lib' "$@"

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

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

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