2011-10-16 23 views
8

मैं कुछ वैश्विक चरों में कुछ गतिशील व्यवहार रिकॉर्ड करना चाहता हूं। इसलिए मैंने कोड को उपकरण देने के लिए एक पास लिखा और वैश्विक चर अद्यतन करने के लिए कुछ निर्देश डालें। मैंने वैश्विक वैरिएबल को परिभाषित करने के लिए ग्लोबल वैरिएबल कन्स्ट्रक्टर का उपयोग करने की कोशिश की, लेकिन दो समस्याएं हैं। सबसे पहले, मैं मुख्य फ़ंक्शन वाले मॉड्यूल में वैश्विक चर को कैसे परिभाषित कर सकता हूं? दूसरा, मैं उन मॉड्यूल चर को अन्य मॉड्यूल में कैसे डिलीयर कर सकता हूं? यह "बाहरी डबल कुछ टूथिंग" जैसा है;मैं एलएलवीएम में वैश्विक चर कैसे घोषित कर सकता हूं?

लक्ष्य कार्यक्रमों सी

+0

आप किस भाषा का उपयोग कर रहे हैं? ([एलएलवीएम] (http://llvm.org/) एक भाषा नहीं है, यह "मॉड्यूलर और पुन: प्रयोज्य कंपाइलर और टूलचेन प्रौद्योगिकियों का संग्रह" है)। –

+2

ऐसा लगता है कि वे एक भाषा संकलित करने के बजाय सीधे प्रोग्राम बनाने के लिए एलएलवीएम एपीआई का उपयोग कर रहे हैं। –

+1

हां, मैं बस कई निर्देश डालना चाहता हूं। – dalibocai

उत्तर

21

में लिखे गए हैं वहाँ एक उपकरण है जो इस और LLVM API के बारे में कई अन्य सवालों के जवाब सकता है: llc -march=cpp। आप क्लैंग या llvm-gcc का उपयोग करके एक बिटकोड फ़ाइल जेनरेट कर सकते हैं, और उसके बाद एक C++ कोड बना सकते हैं जिसे cpp बैकएंड का उपयोग करके उसी मॉड्यूल का पुनर्निर्माण करना चाहिए।

एक नमूना उत्पादन, कैसे एक वैश्विक int * चर को परिभाषित करने के दिखा:

// Global Variable Declarations 

GlobalVariable* gvar_ptr_abc = new GlobalVariable(/*Module=*/*mod, 
     /*Type=*/PointerTy_0, 
     /*isConstant=*/false, 
     /*Linkage=*/GlobalValue::CommonLinkage, 
     /*Initializer=*/0, // has initializer, specified below 
     /*Name=*/"abc"); 
gvar_ptr_abc->setAlignment(4); 

// Constant Definitions 
ConstantPointerNull* const_ptr_2 = ConstantPointerNull::get(PointerTy_0); 

// Global Variable Definitions 
gvar_ptr_abc->setInitializer(const_ptr_2); 
+0

यह सी ++ की तरह दिखता है, सी नहीं ('कॉन्स्टेंट पॉइंटर नल :: get()' कॉल)। –

+6

@ किथ थॉम्पसन, आप सी में किसी भी एलएलवीएम पास नहीं लिख सकते हैं, तो समस्या क्या है? –

+1

ओपी ने कहा कि लक्षित कार्यक्रम सी में लिखे गए हैं (मैं एलएलवीएम से परिचित नहीं हूं, इसलिए मैं आगे टिप्पणी नहीं करूंगा।) –

संबंधित मुद्दे

 संबंधित मुद्दे