اجعل LLVM مضمّنًا وظيفة من مكتبة
سؤال
أحاول أن أجعل LLVM
مضمنة وظيفة من مكتبة.
لدي ملفات LLVM Bitcode (التي تم إنشاؤها يدويًا) قمت بربطها مع llvm-link
, ، ولدي أيضًا مكتبة (مكتوبة في C) تم تجميعها في Bitcode بواسطة clang
وأرشفة مع llvm-ar
. تمكنت من ربط كل شيء معًا والتنفيذ ولكن لا يمكنني الحصول على الحصول على LLVM
لتضمين وظيفة من المكتبة. أي فكرة عن كيفية القيام بذلك؟
المحلول
بعد ربط ملفات Bitcode مع المكتبة ، هل تقوم بتشغيل تمريرة داخلية على رمز Bitcode المرتبط؟ تمريرة داخلية تجعل جميع الوظائف (إلى جانب ذلك main()
) ثابت ويخبر مولد المُحسِّن/الكود أن الوظائف يمكن أن يتم ضمها بأمان دون إبقاء نسخة متاحة لبعض المرجع الخارجي (غير الموجود).
أقوم بربط ملفات Bitcode ومكتبات Bitcode معًا يدويًا باستخدام التعليمات البرمجية المستعارة من llvm-ld
وأنا أقوم بالتمريرة الداخلية ، لكنني لست متأكدًا مما إذا llvm-link
هل يمر الاستيعاب أم لا.