Подскажите ошибку в коде на си РЕШЕНО

Модератор: Модераторы разделов

Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

Код: Выделить всё

#include <termios.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <curses.h>
void sig_winch(int signo)
 {
    struct winsize size;
    ioctl(fileno(stdout), TIOCGWINSZ, (char *) &size);
    resizeterm(size.ws_row, size.ws_col);
    nodelay(stdscr, 1);
    while (wgetch(stdscr) != ERR);
    nodelay(stdscr, 0);
 }
int main(int argc, char ** argv)
 {
   initscr();
   signal(SIGWINCH, sig_winch);
   keypad(stdscr, 1);
   mousemask(BUTTON1_CLICKED, NULL);
   move(2,2);
   refresh();
   while (wgetch(stdscr) == KEY_MOUSE) {
      MEVENT event;
      getmouse(&event);
      move(0, 0);
      printw("Mouse button pressed at %i, %i\n", event.x, event.y);
      refresh();
      move(event.y, event.x);
   }
   endwin();
   exit(EXIT_SUCCESS);
 }


ругается
./mouse.c: In function ‘sig_winch’:
./mouse.c:12: error: stray ‘\302’ in program
./mouse.c:12: error: stray ‘\240’ in program
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение Denjs »

в коде, надеюсь, процитирован файл mouse.c ? )))

у вас там вкраплений русских букв нет? в строке 12?
...попробуйте тупо перенабрать заново данную строку..
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

переписал весь код с нуля (на всяк пожарный)

Код: Выделить всё

#include <termios.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <curses.h>
void sig_winch (int signo) {
    struct winsize size;
    ioctl (fileno(stdout), TIOCGWINSZ, (char *) &size);
    resizeterm(size.ws_row, size.ws_col);
    nodelay(stdscr, 1);
    while (wgetch(stdscr)!=ERR);
    nodelay(stdscr, 0);
}
int main (int argc, char ** argv) {
    initscr();
    signal(SIGWINCH,sig_winch);
    keypad(stdscr, 1);
    mousemask(BUTTON1_CLICKED, NULL);
    move(2,2);
    refresh();
    while(wgetch(stdscr)==KEY_MOUSE){
        MEVENT event;
        getmouse(&event);
        move(0,0);
        printw("X = %i, Y = %i\n",event.x,event.y);
        refresh();
        move(event.x,event.y);
    }
    endwin();
    exit(EXIT_SUCCESS);
}


получаю

Код: Выделить всё

gcc -Wall -o getm ./m.c
/tmp/.private/soso/ccqmnrZI.o: In function `sig_winch':
m.c:(.text+0x41): undefined reference to `resizeterm'
m.c:(.text+0x46): undefined reference to `stdscr'
m.c:(.text+0x56): undefined reference to `nodelay'
m.c:(.text+0x5b): undefined reference to `stdscr'
m.c:(.text+0x63): undefined reference to `wgetch'
m.c:(.text+0x6d): undefined reference to `stdscr'
m.c:(.text+0x7d): undefined reference to `nodelay'
/tmp/.private/soso/ccqmnrZI.o: In function `main':
m.c:(.text+0x99): undefined reference to `initscr'
m.c:(.text+0xb2): undefined reference to `stdscr'
m.c:(.text+0xc2): undefined reference to `keypad'
m.c:(.text+0xd6): undefined reference to `mousemask'
m.c:(.text+0xdb): undefined reference to `stdscr'
m.c:(.text+0xf3): undefined reference to `wmove'
m.c:(.text+0xf8): undefined reference to `stdscr'
m.c:(.text+0x100): undefined reference to `wrefresh'
m.c:(.text+0x10d): undefined reference to `getmouse'
m.c:(.text+0x112): undefined reference to `stdscr'
m.c:(.text+0x12a): undefined reference to `wmove'
m.c:(.text+0x144): undefined reference to `printw'
m.c:(.text+0x149): undefined reference to `stdscr'
m.c:(.text+0x151): undefined reference to `wrefresh'
m.c:(.text+0x15d): undefined reference to `stdscr'
m.c:(.text+0x16d): undefined reference to `wmove'
m.c:(.text+0x172): undefined reference to `stdscr'
m.c:(.text+0x17a): undefined reference to `wgetch'
m.c:(.text+0x186): undefined reference to `endwin'
collect2: ld returned 1 exit status
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение кодировщик »

komcumir писал(а):
21.07.2009 16:25
переписал весь код с нуля (на всяк пожарный)

Код: Выделить всё

#include <termios.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <curses.h>
void sig_winch (int signo) {
    struct winsize size;
    ioctl (fileno(stdout), TIOCGWINSZ, (char *) &size);
    resizeterm(size.ws_row, size.ws_col);
    nodelay(stdscr, 1);
    while (wgetch(stdscr)!=ERR);
    nodelay(stdscr, 0);
}
int main (int argc, char ** argv) {
    initscr();
    signal(SIGWINCH,sig_winch);
    keypad(stdscr, 1);
    mousemask(BUTTON1_CLICKED, NULL);
    move(2,2);
    refresh();
    while(wgetch(stdscr)==KEY_MOUSE){
        MEVENT event;
        getmouse(&event);
        move(0,0);
        printw("X = %i, Y = %i\n",event.x,event.y);
        refresh();
        move(event.x,event.y);
    }
    endwin();
    exit(EXIT_SUCCESS);
}


получаю

Код: Выделить всё

gcc -Wall -o getm ./m.c
/tmp/.private/soso/ccqmnrZI.o: In function `sig_winch':
m.c:(.text+0x41): undefined reference to `resizeterm'
m.c:(.text+0x46): undefined reference to `stdscr'
m.c:(.text+0x56): undefined reference to `nodelay'
m.c:(.text+0x5b): undefined reference to `stdscr'
m.c:(.text+0x63): undefined reference to `wgetch'
m.c:(.text+0x6d): undefined reference to `stdscr'
m.c:(.text+0x7d): undefined reference to `nodelay'
/tmp/.private/soso/ccqmnrZI.o: In function `main':
m.c:(.text+0x99): undefined reference to `initscr'
m.c:(.text+0xb2): undefined reference to `stdscr'
m.c:(.text+0xc2): undefined reference to `keypad'
m.c:(.text+0xd6): undefined reference to `mousemask'
m.c:(.text+0xdb): undefined reference to `stdscr'
m.c:(.text+0xf3): undefined reference to `wmove'
m.c:(.text+0xf8): undefined reference to `stdscr'
m.c:(.text+0x100): undefined reference to `wrefresh'
m.c:(.text+0x10d): undefined reference to `getmouse'
m.c:(.text+0x112): undefined reference to `stdscr'
m.c:(.text+0x12a): undefined reference to `wmove'
m.c:(.text+0x144): undefined reference to `printw'
m.c:(.text+0x149): undefined reference to `stdscr'
m.c:(.text+0x151): undefined reference to `wrefresh'
m.c:(.text+0x15d): undefined reference to `stdscr'
m.c:(.text+0x16d): undefined reference to `wmove'
m.c:(.text+0x172): undefined reference to `stdscr'
m.c:(.text+0x17a): undefined reference to `wgetch'
m.c:(.text+0x186): undefined reference to `endwin'
collect2: ld returned 1 exit status


gcc -Wall -lcurses -o file file.c
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

кодировщик писал(а):
21.07.2009 16:42
gcc -Wall -lcurses -o file file.c
Аналогично
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение Женя Подсыпальников »

komcumir писал(а):
21.07.2009 16:50
кодировщик писал(а):
21.07.2009 16:42
gcc -Wall -lcurses -o file file.c
Аналогично

...у некоторых - на -lncurses хватает... :)
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

Женя Подсыпальников писал(а):
21.07.2009 17:31
...у некоторых - на -lncurses хватает... :)
аналогично (

з.ы. Может есть готовое приложение? Требуется сообщить в консоль координаты курсора мыши.
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение кодировщик »

komcumir писал(а):
21.07.2009 17:39
Женя Подсыпальников писал(а):
21.07.2009 17:31
...у некоторых - на -lncurses хватает... :)
аналогично (

з.ы. Может есть готовое приложение? Требуется сообщить в консоль координаты курсора мыши.

а сами хедеры либ стоят?!
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение gmorgunov »

komcumir
Вот рабочий код, проверил в SUSE:

Код: Выделить всё

#include <termios.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <ncurses.h> /**********    ИЗМЕНИТЕ ЗДЕСЬ   *****************/

void sig_winch (int signo) {
    struct winsize size;
    ioctl (fileno(stdout), TIOCGWINSZ, (char *) &size);
    resizeterm(size.ws_row, size.ws_col);
    nodelay(stdscr, 1);
    while (wgetch(stdscr)!=ERR);
    nodelay(stdscr, 0);
}
int main (int argc, char ** argv) {
    initscr();
    signal(SIGWINCH,sig_winch);
    keypad(stdscr, 1);
    mousemask(BUTTON1_CLICKED, NULL);
    move(2,2);
    refresh();
    while(wgetch(stdscr)==KEY_MOUSE){
        MEVENT event;
        getmouse(&event);
        move(0,0);
        printw("X = %i, Y = %i\n",event.x,event.y);
        refresh();
        move(event.x,event.y);
    }
    endwin();
    exit(EXIT_SUCCESS);
}

Компилировать: gcc -Wall -lncurses -o myfile myfile.c . До кучи проверьте стоит ли ncurses командой: find / -name "*curses*" . Удачи.
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение sergio »

Код: Выделить всё

sergio@mirkwood:~/wrk$ mkdir trash
sergio@mirkwood:~/wrk$ cd trash/
sergio@mirkwood:~/wrk/trash$ cat > m.c
#include <termios.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <curses.h>
void sig_winch (int signo) {
    struct winsize size;
    ioctl (fileno(stdout), TIOCGWINSZ, (char *) &size);
    resizeterm(size.ws_row, size.ws_col);
    nodelay(stdscr, 1);
    while (wgetch(stdscr)!=ERR);
    nodelay(stdscr, 0);
}
int main (int argc, char ** argv) {
    initscr();
    signal(SIGWINCH,sig_winch);
    keypad(stdscr, 1);
    mousemask(BUTTON1_CLICKED, NULL);
    move(2,2);
    refresh();
    while(wgetch(stdscr)==KEY_MOUSE){
        MEVENT event;
        getmouse(&event);
        move(0,0);
        printw("X = %i, Y = %i\n",event.x,event.y);
        refresh();
        move(event.x,event.y);
    }
    endwin();
    exit(EXIT_SUCCESS);
}

sergio@mirkwood:~/wrk/trash$ ls
m.c
sergio@mirkwood:~/wrk/trash$ gcc -Wall -lncurses m.c
sergio@mirkwood:~/wrk/trash$ ./a.out


Работает.
Проверяем наличие библиотек, что ли.
Скажем:

Код: Выделить всё

find {,/usr}/lib -iname '*curses*'
find {,/usr}/lib -iname '*curses*' -exec ls -ld '{}' \;


По-идее вас интересует libncurses.a
Если нашли, то пробуем еще -L:

Код: Выделить всё

$ gcc -Wall -L/path/to/libsdirectory -lncurses m.c
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

Есть
/usr/lib/libncurses.so
/usr/lib/libcurses.so
Есть
/usr/include/ncurses.h
/usr/include/ncurses
/usr/include/ncurses/ncurses.h
/usr/include/ncurses/ncurses_dll.h
/usr/include/ncurses/curses.h
/usr/include/curses.h

Это оно? Код вот только не компилится (
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение кодировщик »

komcumir писал(а):
22.07.2009 09:31
Есть
/usr/lib/libncurses.so
/usr/lib/libcurses.so
Есть
/usr/include/ncurses.h
/usr/include/ncurses
/usr/include/ncurses/ncurses.h
/usr/include/ncurses/ncurses_dll.h
/usr/include/ncurses/curses.h
/usr/include/curses.h

Это оно? Код вот только не компилится (

Что за чудо-дистрибутив?!
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

Пока компилировать си не стал не жаловался...
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение sergio »

komcumir писал(а):
22.07.2009 09:31
Есть
/usr/lib/libncurses.so
/usr/lib/libcurses.so
Есть
/usr/include/ncurses.h
/usr/include/ncurses
/usr/include/ncurses/ncurses.h
/usr/include/ncurses/ncurses_dll.h
/usr/include/ncurses/curses.h
/usr/include/curses.h

Это оно? Код вот только не компилится (


Не оно. libncurses.a
Код, к слову, "компилится". Он не линкуется. Что делает нам разницу. ;)
Во втором списке вообще заголовки, это к вопросу не относится. Нужны библиотеки статической линковки.

Код: Выделить всё

$ find {,/usr}/lib -iname '*curses*' -exec ls -ld '{}' \;
lrwxrwxrwx 1 root root 18 2007-05-28 03:41 /lib/libncursesw.so.5 -> libncursesw.so.5.5
-rw-r--r-- 1 root root 308288 2006-10-19 15:02 /lib/libncursesw.so.5.5
-rw-r--r-- 1 root root 263040 2006-10-19 15:02 /lib/libncurses.so.5.5
lrwxrwxrwx 1 root root 17 2007-05-28 03:41 /lib/libncurses.so.5 -> libncurses.so.5.5
-rw-r--r-- 1 root root 41596 2008-12-06 15:00 /usr/lib/ruby/1.8/i486-linux/curses.so
-rw-r--r-- 1 root root 10388 2008-10-22 23:53 /usr/lib/python2.4/lib-dynload/_curses_panel.so
-rw-r--r-- 1 root root 62088 2008-10-22 23:53 /usr/lib/python2.4/lib-dynload/_curses.so
drwxr-xr-x 2 root root 4096 2008-11-22 02:47 /usr/lib/python2.4/curses
-rw-r--r-- 1 root root 129542 2006-10-19 15:02 /usr/lib/libncurses++.a
lrwxrwxrwx 1 root root 20 2007-08-11 13:00 /usr/lib/libncurses.so -> /lib/libncurses.so.5
lrwxrwxrwx 1 root root 12 2007-08-11 13:00 /usr/lib/libcurses.a -> libncurses.a
-rw-r--r-- 1 root root 129542 2006-10-19 15:02 /usr/lib/libncurses++w.a
-rw-r--r-- 1 root root 417764 2006-10-19 15:02 /usr/lib/libncurses.a
-rw-r--r-- 1 root root 41588 2009-06-18 09:55 /usr/lib/vlc/gui/libncurses_plugin.so
lrwxrwxrwx 1 root root 21 2008-05-06 14:21 /usr/lib/libncursesw.so -> /lib/libncursesw.so.5
lrwxrwxrwx 1 root root 13 2007-08-11 13:00 /usr/lib/libcurses.so -> libncurses.so
lrwxrwxrwx 1 root root 13 2007-08-17 07:21 /usr/lib/libncurses.so.5 -> libtermcap.so
-rw-r--r-- 1 root root 482222 2006-10-19 15:02 /usr/lib/libncursesw.a


Вот они:

Код: Выделить всё

$ find {,/usr}/lib -iname 'libncurses*.a' -exec ls -ld '{}' \;
-rw-r--r-- 1 root root 129542 2006-10-19 15:02 /usr/lib/libncurses++.a
-rw-r--r-- 1 root root 129542 2006-10-19 15:02 /usr/lib/libncurses++w.a
-rw-r--r-- 1 root root 417764 2006-10-19 15:02 /usr/lib/libncurses.a
-rw-r--r-- 1 root root 482222 2006-10-19 15:02 /usr/lib/libncursesw.a

третья (8bit) или четвертая (utf8) - ваши

Еще можно взглянуть на директории поиска gcc для порядку:

Код: Выделить всё

$ gcc -print-search-dirs
install: /usr/lib/gcc/i486-linux-gnu/4.1.2/
programs: =/usr/lib/gcc/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/:/usr/libexec/gcc/i486-linux-gnu/4.1.2/:/usr/libexec/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../i486-linux-gnu/bin/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../i486-linux-gnu/bin/
libraries: =/home/sergio/lib/i486-linux-gnu/4.1.2/:/home/sergio/lib/:/usr/lib/gcc/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../i486-linux-gnu/lib/i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../i486-linux-gnu/lib/:/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../i486-linux-gnu/4.1.2/:/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../:/lib/i486-linux-gnu/4.1.2/:/lib/:/usr/lib/i486-linux-gnu/4.1.2/:/usr/lib/

В части libraries желательно углядеть /usr/lib где лежит ваша либа. В выводе выше она на самом конце списка.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

РЕШЕНО

gcc -Wall -o -lncurses -getm ./m.c
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение sergio »

komcumir писал(а):
22.07.2009 11:07
РЕШЕНО
gcc -Wall -o -lncurses -getm ./m.c

Это что за волшебный ключ такой?? Я его в option index GCC вообще не зрю. :unsure:
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Подскажите ошибку в коде на си РЕШЕНО

Сообщение komcumir »

sergio писал(а):
22.07.2009 11:16
komcumir писал(а):
22.07.2009 11:07
РЕШЕНО
gcc -Wall -o -lncurses -getm ./m.c

Это что за волшебный ключ такой?? Я его в option index GCC вообще не зрю. :unsure:
требовалось поменять местами -o и -lncurses
Спасибо сказали: