2010-03-29 16 views
5

से लिंक करना मैं जीएनयू कंपाइलर के लिए नया हूं।लिंकर स्क्रिप्ट फ़ाइल को स्रोत कोड

मेरे पास एक सी स्रोत कोड फ़ाइल है जिसमें कुछ संरचनाएं और चर शामिल हैं जिनमें मुझे किसी विशेष स्थान पर कुछ चर रखने की आवश्यकता है।

तो, मैं एक लिंकर स्क्रिप्ट फ़ाइल लिखा और सी स्रोत कोड में चर घोषणा पर __ attribute__("SECTION") इस्तेमाल किया, है।

मैं एक जीएनयू संकलक (cygwin) का उपयोग कर रहा स्रोत कोड को संकलित करने और -objcopy विकल्प का उपयोग कर एक हेक्स फ़ाइल बनाने, लेकिन मैं उसके अनुसार चर स्थानांतरित करने के लिए संकलन में मेरी लिंकर स्क्रिप्ट फ़ाइल लिंक करने का तरीका नहीं मिल रहा है।

मैं संदर्भ के लिए लिंकर स्क्रिप्ट फ़ाइल और सी स्रोत फ़ाइल संलग्न कर रहा हूं।

कृपया जीएनयू का उपयोग करके .hex फ़ाइल बनाते समय लिंकर स्क्रिप्ट फ़ाइल को मेरे स्रोत कोड से लिंक करने में मेरी सहायता करें।

/*linker script file*/ 
/*defining memory regions*/ 

     MEMORY 
     { 
     base_table_ram  : org = 0x00700000, len = 0x00000100 /*base table area for BASE table*/ 
     mem2    : org =0x00800200, len = 0x00000300 /* other structure variables*/ 
     } 
/*Sections directive definitions*/ 

     SECTIONS 
     { 
     BASE_TABLE : { } > base_table_ram 

     GROUP     : 
      { 
        .text  : { } { *(SEG_HEADER) } 
        .data  : { } { *(SEG_HEADER) } 
        .bss   : { } { *(SEG_HEADER) } 

      } > mem2 

     } 

सी स्रोत कोड:

const UINT8 un8_Offset_1 __attribute__((section("BASE_TABLE"))) = 0x1A; 
const UINT8 un8_Offset_2 __attribute__((section("BASE_TABLE"))) = 0x2A; 
const UINT8 un8_Offset_3 __attribute__((section("BASE_TABLE"))) = 0x3A; 
const UINT8 un8_Offset_4 __attribute__((section("BASE_TABLE"))) = 0x4A; 
const UINT8 un8_Offset_5 __attribute__((section("BASE_TABLE"))) = 0x5A;  
const UINT8 un8_Offset_6 __attribute__((section("SEG_HEADER"))) = 0x6A; 

मेरे इरादे का पता मैं परिभाषित लिंकर स्क्रिप्ट फ़ाइल पर की धारा "BASE_TABLE" चर जगह है और "SEG_HEADER" पर शेष चर में परिभाषित किया गया उपरोक्त लिंकर स्क्रिप्ट फ़ाइल।

लेकिन संकलन के बाद जब मैं फाइल अलग अनुभाग चर, विभिन्न हेक्स रिकॉर्ड में स्थित हैं 0x00 के एक पते, नहीं लिंकर स्क्रिप्ट फ़ाइल में दिए गए एक में स्थित हेक्स करने के लिए लग रहे हो।

कृपया लिंकर स्क्रिप्ट फ़ाइल को स्रोत कोड से जोड़ने में मेरी सहायता करें।

क्या लिंकर स्क्रिप्ट फ़ाइल को लिंक करने के लिए कोई कमांड लाइन विकल्प हैं, यदि कोई मुझे विकल्प के साथ जानकारी प्रदान करने के बारे में जानकारी प्रदान करता है।

अग्रिम धन्यवाद,

सुरेश डीएन।

उत्तर

2

gcc -Xlinker -T (linker script name) (c sources files)

2

मैं पहली बार फाइलों वस्तु और उसके बाद उन लोगों के साथ लिंक करने के लिए अपने सभी ग फ़ाइलें संकलन का प्रयास करें:

gcc -Xlinker -T"xxx.lds" (all object files)

जीसीसी डॉक्स से:

`-Xlinker OPTION' 
    Pass OPTION as an option to the linker. You can use this to 
    supply system-specific linker options which GNU CC does not know 
    how to recognize. 
2

के लिए धन्यवाद प्रतिक्रिया,

मुझे एक मीटर मिला है जीसीसी में अयस्क लिंकर विकल्प, "एलडी" और टीएच विकल्प - अनुभागों को स्रोत कोड से जोड़ने के लिए।

ld -T (linker scriptname) -o (final objfile) (objectfile of source file)

धन्यवाद सुरेश