2013-09-24 9 views
5

मैं LLVM-देव पर this thread पढ़ लिया है और एक ही समस्या का सामना करना पड़ रहा है: मैं llvm-link की मदद से एक और एकल bitcode फ़ाइल में अन्य bitcode फाइलों के साथ LLVM-ar archieve पुस्तकालय लिंक नहीं कर सकते।क्या एक बिटकोड फ़ाइल में llvm-ar archieve के साथ बिटकोड को लिंक करना संभव है?

clang -emit-llvm -g -c -o main.bc main.c 
clang -emit-llvm -g -c -o calc.bc calc.c 
llvm-ar rcs libcalc.la calc.bc 
llvm-link libcalc.la main.bc -o test 

समस्या एक ही है: llvm-link शिकायत

llvm-link: libcalc.la:1:2: error: expected integer 
!<arch> 
^ 

और How to link object to libraries with LLVM >= 3.1 ? (no GNU ld) पढ़ने के बाद, मैं भी LLVM-ld के llvm2.9 संस्करण की कोशिश की।

LLVM ERROR: Program used external function 'Square' which could not be resolved! 

तो मुझे क्या करना चाहिए:

llvm-ld --disable-opt libcalc.la main.bc -o test 

तथापि libcalc.la सही ढंग से और lli रिपोर्ट मॉड्यूल में नहीं है लिंक कर दिया है?

अद्यतन

मैं तो Can't link against static library when compiling objects from LLVM bitcode. पढ़ सकते हैं और पाते हैं कि LLVM-ld काम करता है जब आदेश को बदलने:

llvm-ld --disable-opt main.bc libcalc.la -o test 

लेकिन llvm-link अभी भी विफल रहता है।

+0

आप सोने LTO प्लगइन का उपयोग कर सकते हैं - वहाँ एक संयुक्त आईआर फ़ाइल रखने के लिए एक विकल्प है। –

+0

@ एसके-तर्क धन्यवाद। लेकिन तब सही विकल्प क्या है? ऐसा लगता है कि llvm दस्तावेज़ (http://llvm.org/docs/GoldPlugin.html) इसमें इसके बारे में बहुत कम है। –

+2

इसे 'em-emit-llvm' –

उत्तर

7
  • llvm-link बिटकोड अभिलेखागार, AFAIK का समर्थन नहीं करता है। यह बस प्रदान की गई इनपुट फ़ाइलों पर जाता है, और प्रत्येक को बिटकोड फ़ाइल (या तो बाइनरी या टेक्स्टुअल एलएलवीएम आईआर) के रूप में पार्स करने का प्रयास करता है।
  • llvm-ld नए एलएलवीएम में मौजूद नहीं है, इसलिए मैं इसे पूरी तरह से दूर रहने का सुझाव दूंगा।

बस फ़ाइलों के साथ अलग .bc फ़ाइलों को एक साथ लिंक करें। बिटकोड फ़ाइलों के संग्रहण को लिंकर के लिए वैसे ही लाभ नहीं होते हैं, वैसे भी देशी लिंकिंग में।

+0

शायद पुराने 'llvm-ld' की तरह काम करने के लिए थोड़ा सा llvm-link tweak करने की आवश्यकता है?हम एक विशाल पुस्तकालय से निपट रहे हैं और हम बिटकोड को हासिल करना चाहते हैं; अन्यथा मैन्युअल रूप से ऑब्जेक्ट्स को लिंक करना परेशानी होगी। –

+3

@ हांगक्सुचेन: आप एक पैच प्रदान करने के लिए llvmdev @ को सुझाव दे सकते हैं जो 'llvm-link' को अभिलेखागार पढ़ने देता है :-) इसके अलावा, ध्यान दें कि यह एक बहुत ही छोटा और छोटा टूल है और इसकी कार्यक्षमता को लागू करने के लिए यह छोटा है (एन्हांसमेंट सहित) अपना –

0

आप अपने bitcode फ़ाइलों से जोड़ने के लिए archivers जरूरत नहीं:

clang -emit-llvm -g -c -o main.bc main.c 
clang -emit-llvm -g -c -o calc.bc calc.c 
clang main.bc calc.bc -o test 
संबंधित मुद्दे