2014-04-16 5 views
8

मैं 64-बिट लिनक्स मशीन पर सी में एक हैलो वर्ल्ड प्रोग्राम संकलित कर रहा हूं। मैं एक एटीएमईएल AT91SAM9G20 प्रोसेसर के साथ फॉक्स जी 20 वी बोर्ड पर अपने प्रोग्राम को संकलित करने के लिए एक जीसीसी एआरएम एम्बेडेड टूलचेन का उपयोग कर रहा हूं।arm-none-eabi-gcc और लिंकिंग लाइब्रेरी liba.a त्रुटि का उपयोग करके संकलन

पहले लेते समय, मुझे संकलन करते समय कुछ त्रुटियां थीं क्योंकि कार्यक्रम printf, वापसी आदि कार्यों (मानक सी कार्यों) को पहचान नहीं पाया था। इसलिए मैं arm-none-eabi-gcc -o hello hello.c libc.a करके काम करता है, जो मेरा मानना ​​है कि libc.a पुस्तकालय (मुझे ठीक कर लें मैं गलत हूँ) में परिभाषित कर रहे हैं, के बीच की कड़ी बनाने का फैसला किया, लेकिन परिणाम अभी भी त्रुटियों में परिणाम:

libc.a(lib_a-exit.o): In function `exit': 
exit.c:(.text.exit+0x16): undefined reference to `_exit' 
libc.a(lib_a-sbrkr.o): In function `_sbrk_r': 
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk' 
libc.a(lib_a-writer.o): In function `_write_r': 
writer.c:(.text._write_r+0x10): undefined reference to `_write' 
libc.a(lib_a-closer.o): In function `_close_r': 
closer.c:(.text._close_r+0xc): undefined reference to `_close' 
libc.a(lib_a-fstatr.o): In function `_fstat_r': 
fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat' 
libc.a(lib_a-isattyr.o): In function `_isatty_r': 
isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty' 
libc.a(lib_a-lseekr.o): In function `_lseek_r': 
lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek' 
libc.a(lib_a-readr.o): In function `_read_r': 
readr.c:(.text._read_r+0x10): undefined reference to `_read' 
collect2: error: ld returned 1 exit status 

मैं वास्तव में अनिश्चित हूं कि कार्यक्रम अभी भी मानक कार्यों को क्यों नहीं पहचानता है, भले ही मैंने पुस्तकालय को एप्लिकेशन से लिंक किया हो। अगर किसी के पास कोई कारण है, या कोई समाधान है कि मैं इस समस्या को कैसे ठीक कर सकता हूं, तो मैं बहुत आभारी रहूंगा।

अद्यतन

मैं here से glibc पुस्तकालय डाउनलोड किया है। मैंने संकलित और syscalls.c लाइब्रेरी से एक स्थिर लाइब्रेरी बनाई है जिसे मैंने newlib-2.1.0/libgloss/arm में पाया और जब मैं लाइब्रेरी को अपने एप्लिकेशन कोड से लिंक करता हूं, तो मुझे अभी भी वही त्रुटि मिलती है।

+2

सटीक रूप से जीसीसी एआरएम एम्बेडेड टूलचेन क्या आप उपयोग कर रहे हैं? ऐसा लगता है कि अपरिभाषित संदर्भ ऐसे कार्य हैं जो आप हैं (या कोई है) को विशिष्ट मंच पर 'libc.a' लाइब्रेरी को एकीकृत करने के लिए लिखने की उम्मीद है। –

+1

@MichaelBurr यह लिनेरो जीसीसी का पूर्व निर्मित 32-बिट संस्करण है। तो ऐसा कुछ है जिसे मुझे 'libc.a' लाइब्रेरी में जोड़ना होगा? ऐसा क्या हो सकता है? – Adam

उत्तर

15

इस क्रियान्वित करने का प्रयास करें:

arm-none-eabi-gcc --specs=rdimon.specs -lgcc -lc -lm -lrdimon -o hello hello.c 

आपका टूलकिट librdimon.a है, जो बुनियादी मानक सी कार्य प्रदान करता एक पुस्तकालय प्रदान करने के लिए लगता है।

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