انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: agape در 12 امرداد 1390، 06:24 ب‌ظ

عنوان: عدم کارکرد کتابخانه STDIO
ارسال شده توسط: agape در 12 امرداد 1390، 06:24 ب‌ظ
 ](*,)
سلام خسته نباشید!
من یه مشکلی دارم که خیلی عجیب و غریب و بی ریشه است - من برای AVR یه برنامه نوشتم که یه چیزی رو توی خروجی UART نشون بده
حالا کامپایل نمیشه ! نمیدونم چرا ! انگار کتابخونه STDIO.h مشکل داره برنامه این هست:
    #include <stdio.h>

    static int uart_putchar(char c, FILE *stream);

    static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,
                                             _FDEV_SETUP_WRITE);

    static int
    uart_putchar(char c, FILE *stream)
    {

      if (c == '\n')
        uart_putchar('\r', stream);
      loop_until_bit_is_set(UCSRA, UDRE);
      UDR = c;
      return 0;
    }

    int
    main(void)
    {
      init_uart();
      stdout = &mystdout;
      printf("Hello, world!\n");

      return 0;
    }
این دقیقا همون کدی هست که توی مثال های کتابخونه برای کار با این کتابخونه ارایه شده وحالا خطایی که میده اینه
main.c:(.text+0x1e)||undefined reference to `stdout'|حاکی از این که  stdout تعریف نشده
کل نت رو زیر و رو کردم چیزی دستگیرم نشد !
همین کد رو توی ویندوز برای winavr نوشتم که همون gcc تحت ویندوز هست کار میکنه و مشکلی نداره !
گفتم شاید کتابخونه خراب نصب شده اونو پاک کردم و دوباره نصب کردم ولی خوب بازم فرجی نشد
desktop:~$ sudo apt-get remove avr-libc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  avr-libc
0 upgraded, 0 newly installed, 1 to remove and 457 not upgraded.
After this operation, 29.3MB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 131904 files and directories currently installed.)
Removing avr-libc ...
desktop:~$ sudo apt-get install avr-libc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  avr-libc
0 upgraded, 1 newly installed, 0 to remove and 457 not upgraded.
Need to get 0B/5,117kB of archives.
After this operation, 29.3MB of additional disk space will be used.
Selecting previously deselected package avr-libc.
(Reading database ... 130370 files and directories currently installed.)
Unpacking avr-libc (from .../avr-libc_1%3a1.6.7-1ubuntu2_all.deb) ...
Setting up avr-libc (1:1.6.7-1ubuntu2) ...
حالا حسابی موندم توش که خوب یعنی چی ؟!این خطایی که داره میده !
عنوان: پاسخ به: عدم کارکرد کتابخانه STDIO
ارسال شده توسط: mani.zaeim در 13 امرداد 1390، 03:27 ب‌ظ
شما باید مشکلAuthentication رو درPAM حل کنی‌
gcc nameOfFile.c -lpam -lpam_misc
عنوان: پاسخ به: عدم کارکرد کتابخانه STDIO
ارسال شده توسط: bahman.azimii در 13 امرداد 1390، 09:20 ب‌ظ
این کد رو بعد از دستور include بنویس شاید مشکلت حل بشه :
;using namespace std
عنوان: پاسخ به: عدم کارکرد کتابخانه STDIO
ارسال شده توسط: HojjatJafary در 14 امرداد 1390، 12:29 ق‌ظ
نقل‌قول
main.c:(.text+0x1e)||undefined reference to
این مشکل بیشتر شبیه به Link error هست تا کامپایل error یعنی یه جورایی C runtime library رو نمی شناسه!
عنوان: پاسخ به: عدم کارکرد کتابخانه STDIO
ارسال شده توسط: bahman.azimii در 14 امرداد 1390، 01:37 ق‌ظ
کتابخانه ++c شناسه هاش رو تو یک فضای نامی به نام std تعریف میکنه تا با شناسه های تعریف شده توسط برنامه نویس اشتباه نشن برای استفاده از این شناسه ها باید با دستور ;using namespace std آنها رو به کامپایلر معرفی کنی ویا قبل از استفاده از اونها بنویسی ::std شناسه stdout رو هم که شما تو تابع main استفاده کردی به کامپایلر معرفی نکردی . شما میتونی دستورتت رو این طوری هم بنویسی:
std::stdout = &mystdout;
عنوان: پاسخ به: عدم کارکرد کتابخانه STDIO
ارسال شده توسط: agape در 18 امرداد 1390، 06:19 ب‌ظ
آقا هیچ کدوم از این کارایی که گفته بودین کار نکرد ! ](*,)
منم نمیدونم این چشه
کلافم کرده از بس راه های مختلف رو امتحان کردم دیونه شدم!
عنوان: پاسخ به: عدم کارکرد کتابخانه STDIO
ارسال شده توسط: fzerorubigd در 19 امرداد 1390، 06:33 ب‌ظ
مشکل اون نیست. شما به جای اینکه یه خط رو که فکر میکنید خطا اونجا اتفاق اافتاده، کل خطا رو کپی کنید. اگه کد شما دقیقا همینه که یه چند تایی include کم داره.
مینیمم اینا رو کم داره :
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <avr/sfr_defs.h>
و نکته دیگه اینکه تابع       init_uart() رو خودتون باید نوشته باشید، تا اونجا که من میدونم چنین تابعی نداریم.
اون تابع رو که حذف کنید-یا خودتون بدنه اونو بنویسید-، و اون include ها رو اضافه کنید درست کامپایل میشه.