اطلاعیه

Collapse
No announcement yet.

خطای undefined reference هنگام کامپایل کردن با winavr

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    خطای undefined reference هنگام کامپایل کردن با winavr

    سلام
    من با winavr موقع استفاده از بعضی از کتابخونه ها ، وقتی از توابع اون کتابخونه استفاده می کنم با خطای undefined reference مواجه میشم !
    همه چیز درسته ، ولی به هر تابعی که استفاده بکنم خطا میده !
    این سری هم کتابخونه uart
    این برنامه من

    #include "global.h"
    #include <stdlib.h>
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include "uart.h"
    #include "rprintf.h"

    //--------------------------------------------------
    void init_HW();
    void rx_handler(unsigned char c);

    //--------------------------------------------------
    void rx_handler(unsigned char c){
    // Do simething with recieved character `c'
    }



    int main( void ){
    _delay_ms(100);

    init_HW();

    // Send to serial port
    rprintf("Hello world!\n"
    while(1);

    return 0;
    }


    void init_HW(void){
    uartInit();
    uartSetBaudRate(9600);
    rprintfInit(uartSendByte);
    // uartSetRxHandler(rx_handler);
    sei();
    }

    اینم لیست خطاهایی که میگیره !

    Error 1 undefined reference to `uartInit' a-i-o.c 34 1 a-i-o
    Error 2 undefined reference to `uartSetBaudRate' a-i-o.c 35 1 a-i-o
    Error 3 undefined reference to `uartSendByte' a-i-o.c 36 1 a-i-o
    Error 4 undefined reference to `uartSendByte' a-i-o.c 36 1 a-i-o
    Error 5 undefined reference to `rprintfInit' a-i-o.c 36 1 a-i-o
    Error 6 undefined reference to `rprintf1RamRom' a-i-o.c 26 1 a-i-o

    کتابخونه هارو هم ضمیمه کردم

    ممنون

    فایل های پیوست شده

    #2
    پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

    یک نکته که باهاش برخوردم این بود که زمانی که فیلها رو با ویژوال استودیو 2008 باز کردم چندتا شون رو ایراد گرفت و پیغام داد که Line Ending هاشون مشکل داره و درستشون کرد شاید ایراد از همین بوده، یه تستی بکنید و درستشون کنید و دوباره کامپایل کنید.

    این فایلها بودن:
    uart.h uart.c lcd.h
    اسمایل، تومورو ویل بی وُرس

    دیدگاه


      #3
      پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

      ویژوال استودیو ندارم !
      میشه اون فایلهایی رو که تصحیح کردهب رام پلود کنید ؟
      ممنون

      دیدگاه


        #4
        پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

        یه گزینه داره که رو تابع میشه find references زد !
        هم تو فایل uart.c و هم تو فایل uart.h رو نشون میده لینک شدند !
        ولی موقع کامپایل میگه undefined !
        لینک شدند ، ولی ناشناخته هستند !

        دیدگاه


          #5
          پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

          http://www.enterupload.com/3ahzj9ojdhnl/uart.rar.html

          اون در زمانه کامپیله که فانکشنها کامپایل میشن، وقتی روی find references هم کلیک میکنید میره تابع رو میاره، ولی خطای undefined reference مربوط به Linker هستش که توابع رو نمیبینه.

          مطمئن بشید که مسیر Linker درسته و فایلهای uart رو میبینه.
          اسمایل، تومورو ویل بی وُرس

          دیدگاه


            #6
            پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

            من با avrstudio 5 کار می کنم که روش avr-gcc نصب هستش
            متآسفانه زیاد هم برنامه نویسیم خوب نیست !
            چجور می تونم مسیر linker رو چک کنم ؟

            دیدگاه


              #7
              پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

              مثل اینکه مشکل حل شد !
              البته چند تا کتابخونه دیگه هم تست کردم، ولی تو آخریه هم باز طبق معمول همیشه مشکل داشت، مشکل رفع شد
              طبق گفته شما مشکل از لینکر بود
              از قسمت solution explorer روی دکمه show all files کلیک کردم
              بعد از اینکه همه فایلهارو نشون داد، رو فایلهایی که خطا میداد کلیک راست کردم و گزینه include in project رو زدم ، تا به پروژه اصلی لینک بشه
              و مشکل حل شد
              ممنون از ژوپیتر

              دیدگاه


                #8
                پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

                دلیل خطای :
                undefined reference to Function
                1- در موقعه link کردن اگر محل فایل ها هدر را نشناخت و فایل ها به برنامه معرفی نشدند
                2- عدم تطبیق بین برنامه ها از نظر نوع سی و نوع سی پلاس پلاس و ترکیب این دو نوع با هم

                راه حل :
                در مورد اول باید فایل سی و هدر آن به برنامه معرفی بشود.
                در مورد دوم باید برای کمپایلر سی پلاس پلاس مشخص شود که بخشی از برنامه به زبان سی هست و در برخورد با آن قوانین سی پلاس پلاس را بکار نگیرد برای همین در فایل سی های اضافه شده و یا در محل معرفی هدرها در برنامه اصلی سی پلاس پلاس باید بخشی را که میخواهیم کمپایلر به زبان سی برخورد کند را بین عبارت زیر قرار داد

                #ifdef __cplusplus
                extern “C” {
                #endif

                معرفی هدرها و یا متن برنامه ای که به زبان سی هست و می خواهیم در سی پلاس پلاس استفاده شود

                #ifdef __cplusplus
                }
                #endif

                دیدگاه


                  #9
                  پاسخ : خطای undefined reference هنگام کامپایل کردن با winavr

                  #ifdef __cplusplus
                  extern "C" {
                  #endif
                  متن برنامه سی

                  #ifdef __cplusplus
                  }
                  #endif

                  دیدگاه

                  لطفا صبر کنید...
                  X