मैं एक एलएलवीएम स्क्रिप्टिंग इंजन लिख रहा हूं कि जेआईटी एक कस्टम भाषा में स्क्रिप्टिंग कोड संकलित करता है। मेरी समस्या यह है कि मैं बाहरी कार्यों को कॉल करने में असमर्थ हूं (यहां तक कि C99 erf() फ़ंक्शन विफल हो रहा है)।बाहरी सी ++ कार्यों में एलएलवीएम जेआईटी कोड को जोड़ने
उदाहरण के लिए अगर मैं 'सी' ERF समारोह extern,
extern "C" double erft(double x){
return erf(x);
}
और बाह्य संबंध के साथ एक समारोह बनाने
std::vector<const Type*> Double1(1,Type::getDoubleTy(getGlobalContext()));
FunctionType *FT = FunctionType::get(Type::getDoubleTy(getGlobalContext()),Double1,false);
Function *erft = Function::Create(FT,Function::ExternalLinkage,"erft",TheModule);
जब Erft साथ मेरी स्क्रिप्ट (0.0 चल रहा है निम्न त्रुटि संदेश मिलता है):
LLVM ERROR: Program used external function 'erft' which could not be resolved!
मैन्युअल
०१२३५१६४१० मानचित्रण करdeclaration of `void llvm::ExecutionEngine::addGlobalMapping(const llvm::GlobalValue*, void*)' outside of class is not definition
जाहिर है मैं कुछ बहुत गलत कर रहा हूँ:
void ExecutionEngine::addGlobalMapping(const GlobalValue * erfF, void * erft);
मुझे निम्नलिखित त्रुटि मिल जाएगा। किसी भी मदद की बहुत सराहना जाएगा
भावी आगंतुकों के लिए एक चेतावनी: उत्तर पदावनत तरीकों के referering कर रहे हैं .. – antipattern
का जवाब [इस] (https://stackoverflow.com/questions/48105342/llvm-jit-add-library-to-module) प्रश्न दिखाता है कि इसे गैर-बहिष्कृत तरीकों से कैसे किया जाए। –