سؤال

أود أن التجربة مع جوجل tcmalloc على لينكس...لدي مشروع كبير هنا ، مع مئات من qmake ولدت Makefile هو...أود أن العثور على طريقة للحصول على دول مجلس التعاون الخليجي إلى العالم رابط ضد tcmalloc (كما يفعل مع libc)...هل هذا ممكن ؟ أم يجب علي أن تحرير كل Makefile?

(أنا أفضل عدم تحرير جميع الملفات برو كما أن هناك مئات منهم)

(أيضا, لقد حاولت بالفعل LD_PRELOAD الأسلوب و هو لا يعمل على حق تماما)...

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

المحلول

كيف makefiles الوصول إلى مترجم (دول مجلس التعاون الخليجي/g++/cc/c++)?

لو كان فقط من خلال اسم (g++) وليس صريحة المسار (/usr/bin/g++) ، يمكنك ببساطة إنشاء بديل g++ في أي دليل كنت تفضل ذلك ، prepend هذا الدليل إلى المسار الخاص بك.

E. g.:إنشاء ~/mytmpgccdir/g++ ملف:

#!/bin/tcsh -f
exec /usr/bin/g++ -Lfoo -lfoo $*:q

مضيفا كل ما إضافات (-Lfoo -lfoo) تريد ، سواء قبل أو بعد غيرها من الحجج ($*:q).

ثم قبل يعتمدون إلى المسار الخاص بك وجعل بشكل طبيعي.

#tcsh version
% set path = ( ~/mytmpgccdir/  $path:q )
% make clean
% make

p.s.إذا كان عن طريق صريحة اسم, كنت قد تكون قادرة على تجاوز ذلك في سطر الأوامر.شيء من هذا القبيل: جعل جميع دول مجلس التعاون الخليجي=~/mytmpgccdir/دول مجلس التعاون الخليجي

p.p.s إذا كنت لا تستخدم LD_PRELOAD, ربما كنت ترغب في السيناريو مثل هذا setenv LD_PRELOAD قبل تشغيل البرنامج.وإلا فإنه من السهل أن تصل الرياح LD_PRELOAD التعرف على كل أمر مثل /bin/ls, جعل, g++, etc.

نصائح أخرى

أولا، تحقق من وثائق كماكي. هناك طريقة سهلة لتحديد (في ملف .pro) أن مكتبة معينة يجب أن تكون مرتبطة دائما في.

وأيضا، منذ كنت مجرد تجربة، ببساطة استخدام LD_PRELOAD - لا إعادة تجميع الضروري:

وLD_PRELOAD="/usr/lib/foo/libtcmalloc.so" ./your_program

وليس لديك للربطت "your_program" ضد مكتبة tcmalloc غوغل.

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