मैं एआरएम माइक्रोकंट्रोलर प्लेटफॉर्म के लिए यागार्टो और एक्लिप्स का उपयोग करके एक साधारण प्रोजेक्ट बनाने का प्रयास कर रहा हूं। मेरी स्टार्टअप कोड में, मैं इस (जो मेरा मानना है कि काफी मानक और अरुचिकर है):मेरे पास __libc_init_array में _init के लिए एक अनिर्धारित संदर्भ क्यों है?
void Reset_Handler(void)
{
/* Initialize data and bss */
__Init_Data();
/* Call CTORS of static objects */
__libc_init_array();
/* Call the application's entry point.*/
main();
while(1) { ; }
}
जब तक मैं __libc_init_array()
करने के लिए कॉल बाहर टिप्पणी, मैं लिंकर से त्रुटि निम्नलिखित हो:
arm-none-eabi-g++ -nostartfiles -mthumb -mcpu=cortex-m4 -TC:/Users/mark/workspace/stm32_cpp_test/STM32F40x_1024k_192k_flash.ld -gc-sections -Wl,-Map=test_rom.map,--cref,--no-warn-mismatch -o stm32_cpp_test "system\\syscalls.o" "system\\startup_stm32f4xx.o" "system\\mini_cpp.o" "system\\cmsis\\system_stm32f4xx.o" main.o
d:/utils/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-init.o): In function `__libc_init_array':
C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\misc/../../../../../../../newlib-1.20.0/newlib/libc/misc/init.c:37: undefined reference to `_init'
collect2.exe: error: ld returned 1 exit status
मुझे यह "अपरिभाषित संदर्भ" त्रुटि क्यों मिल रही है? मैं क्या खो रहा हूँ? मुझे लगता है कि कुछ लिंकर ध्वज है जो मुझे याद आ रहा है, लेकिन मैं अपने जीवन के लिए क्या नहीं समझ सकता।
तो, यदि मैं अपने स्टार्टअप कोड में शून्य _init (शून्य) {} जोड़ता हूं, तो यह ठीक से संकलित करता है। मुझे आश्चर्य है कि यह कार्य क्या करना है? – Mark
_init बाइनरी में आमतौर पर बिंदु है जब ओएस कूदता है तो बाइनरी लोड हो जाती है। प्रविष्टि बिंदु के लिए एक डिफ़ॉल्ट लेबल अधिक या कम। समस्या को ठीक करने के तरीके पर निर्भर करता है कि आपके एम्बेडेड लोडर सिस्टम की स्थापना कैसे की जाती है। मेरे लिए ऐसा लगता है कि यह टूलचैन पूरी तरह से पोर्ट नहीं किया गया है। –
मेरे पास "एम्बेडेड लोडर सिस्टम" नहीं है, मैंने स्टार्टअप कोड स्वयं लिखा है (या, विशेष रूप से मैं कॉपी करता हूं + इसे इंटरनेट से चिपकाता हूं) ... यह कॉर्टेक्स-एम 4 है, और रीसेट हैंडलर पहले (और केवल) चीज निष्पादित। – Mark