błąd przy kompilacji programu z wykorzystaniem biblioteki curses

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
kiprom
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 16 gru 2011, 09:34
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

błąd przy kompilacji programu z wykorzystaniem biblioteki curses

Post autor: kiprom »

mam problem z kompilacją programu. mianowicie wyskakuje mi taki błąd:

Kod: Zaznacz cały

 
grzesiek@ubuntu:~/Pulpit/as$ gcc -o qq qq.c
/tmp/cccyjWSm.o: In function `Skrzyzowanie':
qq.c:(.text+0x7): undefined reference to `stdscr'
qq.c:(.text+0x1f): undefined reference to `wattr_on'
qq.c:(.text+0x4b): undefined reference to `mvprintw'
qq.c:(.text+0x79): undefined reference to `stdscr'
qq.c:(.text+0x81): undefined reference to `wrefresh'
qq.c:(.text+0x86): undefined reference to `stdscr'
qq.c:(.text+0x9e): undefined reference to `wattr_on'
qq.c:(.text+0xca): undefined reference to `mvprintw'
qq.c:(.text+0xf8): undefined reference to `stdscr'
qq.c:(.text+0x100): undefined reference to `wrefresh'
qq.c:(.text+0x105): undefined reference to `stdscr'
qq.c:(.text+0x11d): undefined reference to `wattr_on'
qq.c:(.text+0x149): undefined reference to `mvprintw'
qq.c:(.text+0x177): undefined reference to `stdscr'
qq.c:(.text+0x17f): undefined reference to `wrefresh'
qq.c:(.text+0x184): undefined reference to `stdscr'
qq.c:(.text+0x19c): undefined reference to `wattr_on'
qq.c:(.text+0x1c0): undefined reference to `mvprintw'
qq.c:(.text+0x1ee): undefined reference to `mvprintw'
qq.c:(.text+0x20b): undefined reference to `stdscr'
qq.c:(.text+0x213): undefined reference to `wrefresh'
qq.c:(.text+0x218): undefined reference to `stdscr'
qq.c:(.text+0x230): undefined reference to `wattr_on'
qq.c:(.text+0x25c): undefined reference to `mvprintw'
qq.c:(.text+0x28a): undefined reference to `stdscr'
qq.c:(.text+0x292): undefined reference to `wrefresh'
qq.c:(.text+0x297): undefined reference to `stdscr'
qq.c:(.text+0x2af): undefined reference to `wattr_on'
qq.c:(.text+0x2d3): undefined reference to `mvprintw'
qq.c:(.text+0x301): undefined reference to `mvprintw'
qq.c:(.text+0x31e): undefined reference to `stdscr'
qq.c:(.text+0x326): undefined reference to `wrefresh'
/tmp/cccyjWSm.o: In function `Skrzyzowanie1':
qq.c:(.text+0x33d): undefined reference to `stdscr'
qq.c:(.text+0x355): undefined reference to `wattr_on'
qq.c:(.text+0x371): undefined reference to `mvprintw'
qq.c:(.text+0x38d): undefined reference to `mvprintw'
qq.c:(.text+0x392): undefined reference to `stdscr'
qq.c:(.text+0x3aa): undefined reference to `wattr_on'
qq.c:(.text+0x3c6): undefined reference to `mvprintw'
qq.c:(.text+0x3cb): undefined reference to `stdscr'
qq.c:(.text+0x3d3): undefined reference to `wrefresh'
qq.c:(.text+0x3d8): undefined reference to `stdscr'
qq.c:(.text+0x3f0): undefined reference to `wattr_on'
qq.c:(.text+0x40c): undefined reference to `mvprintw'
qq.c:(.text+0x411): undefined reference to `stdscr'
qq.c:(.text+0x419): undefined reference to `wrefresh'
qq.c:(.text+0x41e): undefined reference to `stdscr'
qq.c:(.text+0x436): undefined reference to `wattr_on'
qq.c:(.text+0x452): undefined reference to `mvprintw'
qq.c:(.text+0x457): undefined reference to `stdscr'
qq.c:(.text+0x45f): undefined reference to `wrefresh'
qq.c:(.text+0x464): undefined reference to `stdscr'
qq.c:(.text+0x47c): undefined reference to `wattr_on'
qq.c:(.text+0x498): undefined reference to `mvprintw'
qq.c:(.text+0x49d): undefined reference to `stdscr'
qq.c:(.text+0x4a5): undefined reference to `wrefresh'
qq.c:(.text+0x4b6): undefined reference to `stdscr'
qq.c:(.text+0x4be): undefined reference to `wrefresh'
/tmp/cccyjWSm.o: In function `Samochod1':
qq.c:(.text+0x4e3): undefined reference to `stdscr'
qq.c:(.text+0x4fb): undefined reference to `wattr_on'
qq.c:(.text+0x516): undefined reference to `mvprintw'
qq.c:(.text+0x527): undefined reference to `stdscr'
qq.c:(.text+0x53f): undefined reference to `wattr_on'
qq.c:(.text+0x55a): undefined reference to `mvprintw'
qq.c:(.text+0x563): undefined reference to `stdscr'
qq.c:(.text+0x56b): undefined reference to `wrefresh'
qq.c:(.text+0x57e): undefined reference to `stdscr'
qq.c:(.text+0x596): undefined reference to `wattr_off'
qq.c:(.text+0x59b): undefined reference to `stdscr'
qq.c:(.text+0x5b3): undefined reference to `wattr_off'
/tmp/cccyjWSm.o: In function `Samochod2':
qq.c:(.text+0x5d8): undefined reference to `stdscr'
qq.c:(.text+0x5e0): undefined reference to `wrefresh'
qq.c:(.text+0x5e9): undefined reference to `stdscr'
qq.c:(.text+0x601): undefined reference to `wattr_on'
qq.c:(.text+0x61c): undefined reference to `mvprintw'
qq.c:(.text+0x62d): undefined reference to `stdscr'
qq.c:(.text+0x645): undefined reference to `wattr_on'
qq.c:(.text+0x660): undefined reference to `mvprintw'
qq.c:(.text+0x67b): undefined reference to `stdscr'
qq.c:(.text+0x693): undefined reference to `wattr_off'
qq.c:(.text+0x698): undefined reference to `stdscr'
qq.c:(.text+0x6b0): undefined reference to `wattr_off'
/tmp/cccyjWSm.o: In function `Skrzyzowanie2':
qq.c:(.text+0x6c7): undefined reference to `stdscr'
qq.c:(.text+0x6df): undefined reference to `wattr_on'
qq.c:(.text+0x6fb): undefined reference to `mvprintw'
qq.c:(.text+0x717): undefined reference to `mvprintw'
qq.c:(.text+0x71c): undefined reference to `stdscr'
qq.c:(.text+0x734): undefined reference to `wattr_on'
qq.c:(.text+0x750): undefined reference to `mvprintw'
qq.c:(.text+0x755): undefined reference to `stdscr'
qq.c:(.text+0x75d): undefined reference to `wrefresh'
qq.c:(.text+0x762): undefined reference to `stdscr'
qq.c:(.text+0x77a): undefined reference to `wattr_on'
qq.c:(.text+0x796): undefined reference to `mvprintw'
qq.c:(.text+0x79b): undefined reference to `stdscr'
qq.c:(.text+0x7a3): undefined reference to `wrefresh'
qq.c:(.text+0x7a8): undefined reference to `stdscr'
qq.c:(.text+0x7c0): undefined reference to `wattr_on'
qq.c:(.text+0x7dc): undefined reference to `mvprintw'
qq.c:(.text+0x7e1): undefined reference to `stdscr'
qq.c:(.text+0x7e9): undefined reference to `wrefresh'
qq.c:(.text+0x7ee): undefined reference to `stdscr'
qq.c:(.text+0x806): undefined reference to `wattr_on'
qq.c:(.text+0x822): undefined reference to `mvprintw'
qq.c:(.text+0x827): undefined reference to `stdscr'
qq.c:(.text+0x82f): undefined reference to `wrefresh'
/tmp/cccyjWSm.o: In function `main':
qq.c:(.text+0x844): undefined reference to `stdscr'
qq.c:(.text+0x854): undefined reference to `intrflush'
qq.c:(.text+0x859): undefined reference to `initscr'
qq.c:(.text+0x85e): undefined reference to `stdscr'
qq.c:(.text+0x867): undefined reference to `stdscr'
qq.c:(.text+0x87f): undefined reference to `stdscr'
qq.c:(.text+0x888): undefined reference to `stdscr'
qq.c:(.text+0x8ae): undefined reference to `endwin'
qq.c:(.text+0x8bd): undefined reference to `start_color'
qq.c:(.text+0x8d9): undefined reference to `init_pair'
qq.c:(.text+0x8f5): undefined reference to `init_pair'
qq.c:(.text+0x911): undefined reference to `init_pair'
qq.c:(.text+0x92d): undefined reference to `init_pair'
qq.c:(.text+0x949): undefined reference to `init_pair'
/tmp/cccyjWSm.o:qq.c:(.text+0x965): more undefined references to `init_pair' follow
/tmp/cccyjWSm.o: In function `main':
qq.c:(.text+0xa12): undefined reference to `stdscr'
qq.c:(.text+0xa2a): undefined reference to `wattr_on'
qq.c:(.text+0xa36): undefined reference to `printw'
qq.c:(.text+0xa3b): undefined reference to `stdscr'
qq.c:(.text+0xa53): undefined reference to `wattr_on'
qq.c:(.text+0xa80): undefined reference to `mvprintw'
qq.c:(.text+0xaad): undefined reference to `mvprintw'
qq.c:(.text+0xab2): undefined reference to `stdscr'
qq.c:(.text+0xaba): undefined reference to `wrefresh'
qq.c:(.text+0xabf): undefined reference to `stdscr'
qq.c:(.text+0xad7): undefined reference to `wattr_on'
qq.c:(.text+0xaf3): undefined reference to `mvprintw'
qq.c:(.text+0xaf8): undefined reference to `stdscr'
qq.c:(.text+0xb00): undefined reference to `wrefresh'
qq.c:(.text+0xb05): undefined reference to `stdscr'
qq.c:(.text+0xb1d): undefined reference to `wattr_on'
qq.c:(.text+0xb39): undefined reference to `mvprintw'
qq.c:(.text+0xb3e): undefined reference to `stdscr'
qq.c:(.text+0xb46): undefined reference to `wrefresh'
qq.c:(.text+0xb9b): undefined reference to `mvprintw'
qq.c:(.text+0xba0): undefined reference to `stdscr'
qq.c:(.text+0xbb8): undefined reference to `wattr_on'
qq.c:(.text+0xbd4): undefined reference to `mvprintw'
qq.c:(.text+0xbd9): undefined reference to `stdscr'
qq.c:(.text+0xbe1): undefined reference to `wrefresh'
qq.c:(.text+0xbe6): undefined reference to `stdscr'
qq.c:(.text+0xbfe): undefined reference to `wattr_on'
qq.c:(.text+0xc1a): undefined reference to `mvprintw'
qq.c:(.text+0xc1f): undefined reference to `stdscr'
qq.c:(.text+0xc27): undefined reference to `wrefresh'
qq.c:(.text+0xc2c): undefined reference to `stdscr'
qq.c:(.text+0xc34): undefined reference to `wrefresh'
qq.c:(.text+0xc43): undefined reference to `stdscr'
qq.c:(.text+0xc4b): undefined reference to `wrefresh'
qq.c:(.text+0xc50): undefined reference to `stdscr'
qq.c:(.text+0xc68): undefined reference to `wattr_on'
qq.c:(.text+0xc84): undefined reference to `mvprintw'
qq.c:(.text+0xc89): undefined reference to `stdscr'
qq.c:(.text+0xca1): undefined reference to `wattr_on'
qq.c:(.text+0xcbd): undefined reference to `mvprintw'
qq.c:(.text+0xcd2): undefined reference to `stdscr'
qq.c:(.text+0xcea): undefined reference to `wattr_on'
qq.c:(.text+0xd06): undefined reference to `mvprintw'
qq.c:(.text+0xd0b): undefined reference to `stdscr'
qq.c:(.text+0xd23): undefined reference to `wattr_on'
qq.c:(.text+0xd48): undefined reference to `mvprintw'
qq.c:(.text+0xd4d): undefined reference to `stdscr'
qq.c:(.text+0xd55): undefined reference to `wrefresh'
qq.c:(.text+0xd6d): undefined reference to `stdscr'
qq.c:(.text+0xd85): undefined reference to `wattr_on'
qq.c:(.text+0xdb2): undefined reference to `mvprintw'
qq.c:(.text+0xdb7): undefined reference to `stdscr'
qq.c:(.text+0xdbf): undefined reference to `wrefresh'
qq.c:(.text+0xdc4): undefined reference to `stdscr'
qq.c:(.text+0xdcc): undefined reference to `wgetch'
qq.c:(.text+0xdd1): undefined reference to `endwin'
collect2: ld returned 1 exit status
kod programu:

Kod: Zaznacz cały

#include <curses.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>



void *Skrzyzowanie(){
//Obramowanie biale
    {
    attron(COLOR_PAIR(12));
    int i,j,k;
    for(i=1;i<20;i++)
        {
        for(j=0;j<65;j++)
            mvprintw(i,j," ");

        j=0;
        }
    i=0;
    j=0;
    refresh();}
//zielony trawnik
    attron(COLOR_PAIR(1));
    int i,j,k;
    for(i=1;i<19;i++)
        {
        for(j=5;j<60;j++)
            mvprintw(i,j," ");
        j=0;
        }
    i=0;
    j=0;
    refresh();

/*poziomo*/
    attron(COLOR_PAIR(4));
    for(i=7;i<12;i++)
        {
        for(j=5;j<60;j++)
            mvprintw(i,j," ");
        j=0;
        }
    i=0;
    j=0;
    refresh();

    attron(COLOR_PAIR(5));
/*poziomo linie*/
    for(j=5;j<35;)
    {    
        mvprintw(9,j,"-");
        j=j+2;    
    }
    for(j=35;j<60;)
    {    
        mvprintw(9,j,"-");
        j=j+2;    
    }
    i=0;
    j=0;
    refresh();



    attron(COLOR_PAIR(4));
/*pionowo*/
    for(i=1;i<19;i++)
    {
        for(j=25;j<36;j++)
            mvprintw(i,j," ");
    
    j=21;
    }
    i=0;
    j=0;
    refresh();

    attron(COLOR_PAIR(5));
/*pionowo linie*/
 

    for(i=1;i<7;)
    {    
        mvprintw(i,30,"|");
        i=i+2;    
    }
    for(i=12;i<20;)
    {    
        mvprintw(i,30,"|");
        i=i+2;    
    }
    i=0;
    j=0;
    refresh();
    return NULL;
}

void *Skrzyzowanie1() {

Skrzyzowanie();

    attron(COLOR_PAIR(6));
    mvprintw(10,18,"A");
    mvprintw(4,26,"B");

/*pionowa start*/
    attron(COLOR_PAIR(2));
    mvprintw(5,19,"START");
    refresh();

    attron(COLOR_PAIR(2));
    
    mvprintw(13,37,"START");
    refresh();

/*poziomo stop*/
    attron(COLOR_PAIR(3));
    mvprintw(13,19,"STOP");
    refresh();

    attron(COLOR_PAIR(3));
    mvprintw(5,37,"STOP");
    refresh();
    sleep(0);
    refresh();

return NULL;
}

void *Samochod1(){

int c;
int a=3;
    for(c=4; c<18; c++){
attron(COLOR_PAIR(6));
    mvprintw(c,26,"B");
    
    
sleep(1);
attron(COLOR_PAIR(4));
mvprintw(a,26,"  ");
a++;

refresh();}
attroff( COLOR_PAIR(6));
attroff( COLOR_PAIR(4));
return NULL;
}
//----------------------------------------------------------------------------
void *Samochod2(){

int c;
int a=17;
    for(c=18; c<58; c++)
    {refresh();
        
    c++;    
    attron(COLOR_PAIR(6));
    mvprintw(10,c,"A");
    sleep(1);
    attron(COLOR_PAIR(4));    
    mvprintw(10,a,"  ");
    a++;
a++;
    
}
attroff( COLOR_PAIR(6));
attroff( COLOR_PAIR(4));
return NULL;
}
//-------------------------------------------------------------------------------
void *Skrzyzowanie2(){
    
    Skrzyzowanie();
    attron(COLOR_PAIR(6));
    mvprintw(10,18,"A");
    mvprintw(4,26,"B");

//pionowo stop*/
    attron(COLOR_PAIR(3));
    mvprintw(5,20,"STOP");
    refresh();

    attron(COLOR_PAIR(3));
    mvprintw(13,37,"STOP");
    refresh();

/*pozioma start*/
    attron(COLOR_PAIR(2));
    mvprintw(13,19,"START");
    refresh();

    attron(COLOR_PAIR(2));
    mvprintw(5,37,"START");
    refresh();

return NULL;
}


int main(void) {


intrflush(stdscr,FALSE);

int x,y,Pid,i;

//
initscr();                        
getmaxyx(stdscr,y,x);

if ((y<20) || (x<60)) {
    endwin();               
    return 1;
}

start_color();
init_pair(1,COLOR_GREEN,COLOR_GREEN);
init_pair(2,COLOR_GREEN,COLOR_BLACK);
init_pair(3,COLOR_RED,COLOR_BLACK);
init_pair(4,COLOR_BLACK,COLOR_BLACK);
init_pair(5,COLOR_WHITE,COLOR_BLACK);
init_pair(6,COLOR_BLACK,COLOR_YELLOW);
init_pair(7,COLOR_MAGENTA,COLOR_WHITE);
init_pair(8,COLOR_BLACK,COLOR_CYAN);
init_pair(9,COLOR_WHITE,COLOR_BLACK);
init_pair(10,COLOR_BLACK,COLOR_RED);
init_pair(11,COLOR_RED,COLOR_MAGENTA);
init_pair(12,COLOR_WHITE,COLOR_WHITE);
attron(COLOR_PAIR(7));
printw("          Symulacja prostego skrzyzowania           ");
attron(COLOR_PAIR(9));
    mvprintw(20,0,"Pid(%d) ", getpid(), Pid);
    mvprintw(21,0,"Proces macierzysty(%d) ", getpid(), Pid);
    refresh();
    attron(COLOR_PAIR(2));
    mvprintw(25,0,"Samochod B START");
    refresh();
    attron(COLOR_PAIR(3));
    mvprintw(25,20,"Samochod A STOP");
    refresh();

 if( (Pid=fork() ) ==0 ){ 
    Skrzyzowanie();
for(i=0; i<2; i++){
    
    Skrzyzowanie1();
    Samochod1();
    mvprintw(22,0,"Proces potmny(%d)",getpid());
    {attron(COLOR_PAIR(2));
    mvprintw(25,0,"Samochod A START");
    refresh();
    }
    {attron(COLOR_PAIR(3));
    mvprintw(25,20,"Samochod B STOP");
    refresh();
    }
refresh();    
    Skrzyzowanie2();
    Samochod2();
    refresh();
    {attron(COLOR_PAIR(2));
    mvprintw(25,0,"Samochod B START");
    }
    {attron(COLOR_PAIR(3));
    mvprintw(25,20,"Samochod A STOP");
    }

}    
    attron(COLOR_PAIR(10));
    mvprintw(26,20," SYMULACJA ZAKOCZONA ");
    attron(COLOR_PAIR(11));
    mvprintw(28,0,"Proces potomny zakonczony(%d)",getpid());
refresh();
    return 0;
}

wait(0);
attron(COLOR_PAIR(8));
mvprintw(26,0," Proces macierzysty zakonczony(%d)",getpid(), Pid);
refresh();
getch();
endwin();
return 0;
}
Ostatnio zmieniony 30 sty 2012, 17:17 przez kiprom, łącznie zmieniany 2 razy.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: błąd przy kompilacji programu z wykorzystaniem biblioteki curses

Post autor: beluosus »

kiprom pisze:

Kod: Zaznacz cały

gcc -o qq qq.c
A gdzie linkowanie do libcurses?

Kod: Zaznacz cały

gcc -lcurses ...
kiprom
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 16 gru 2011, 09:34
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Re: błąd przy kompilacji programu z wykorzystaniem biblioteki curses

Post autor: kiprom »

jak sie linkuje i co to jest linkowanie ? ;/
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: błąd przy kompilacji programu z wykorzystaniem biblioteki curses

Post autor: beluosus »

Jak, napisałem wyżej (chodzi o odpowiednią flagę dla kompilatora).
http://pl.wikipedia.org/wiki/Konsolidacja_(informatyka)
Chodzi o to, że musisz połączyć bibliotekę curses ze swoim plikiem wykonywalnym, aby wiedział on czym są funkcje z których korzysta.
:goog:
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 61 gości