मैं ओएस एक्स 10.8 पर एक्सकोड 4.5.1 का उपयोग करके नमूना कोड "सोनोफ्रैब" संकलित करने का प्रयास कर रहा हूं।इनलाइन फ़ंक्शंस के लिए त्रुटि लिंकिंग
एक समारोह controller.m में इस तरह परिभाषित किया गया है
inline uint32_t ChangeBits(uint32_t currentBits, uint32_t flagsToChange, BOOL setFlags);
यह इस त्रुटि संदेश की ओर जाता है:
Undefined symbols for architecture x86_64:
"_ChangeBits", referenced from:
-[Controller awakeFromNib] in Controller.o
[...]
ld: symbol(s) not found for architecture x86_64
समारोह ChangeBits को इनलाइन निकाला जा रहा है समस्या का हल, लेकिन क्यों करता है लिंकर को मूल परिभाषा के साथ चेंजबिट नहीं मिला?
मुझे ओएस एक्स 10.7 पर एक ही कोड नमूना के साथ यह समस्या याद नहीं है। क्या इस कोड को तोड़ने वाले झुकाव पर कुछ बदलाव हुए हैं? – alecail
शायद क्योंकि आप पहले जीसीसी या एलएलवीएम-जीसीसी का उपयोग कर रहे थे। एलएलवीएम-जीसीसी जीसीसी के साथ संगत होने के लिए है, यानी एक ही परिणाम उत्पन्न करते हैं। अब आप क्लैंग का पूरी तरह से उपयोग कर रहे हैं, आप एलएलवीएम दस्तावेज़ों में वर्णित सटीक चीज़ के अनुसार त्रुटि को देख रहे हैं। – mattjgalloway
मैं इस समस्या में भाग गया और mattjgalloway के जवाब इसे हल किया। बस अधिक स्पष्ट होने के लिए, Controller.m में, पंक्ति 71, "इनलाइन" के सामने "स्थिर" जोड़ें। –