LINUX.ORG.RU

Сообщения enfundo

 

Вопросы по компиляции программ

Привет всем! Я только начал разбираться с Linux-программированием, поэтому у меня появилось несколько вопросов: 1. Сначала я написал простую программу, используя vi: #include int main (int argc, char** argv) { printf("........\n"); return 0; }

и назвал ее - rr.c потом откомпилировал ее:

linux:/home/terminator # gcc rr.c

появился исполняемый файл a.out, переименовал его в rr Попытался запустить его и получил следующее: -bash: rr: command not found

Потом я подумал немного и решил скопировать rr в папку /bin запустил ее оттуда и она сработала!!! Следовательно, вопрос - что, в Линуксе всегда нужно копировать файлы в папку /bin ? Можно ли обойти это ограничение и запустить программу в папке /home/user ?

2. Дальше я решил воспользоваться программой из журнала "Программист" от 04.2001, работающей в графическом режиме. Выглядит она так:

#include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xos.h> #include <stdio.h> #include <string.h> #define WND_START_X 100 #define WND_START_Y 100 #define WND_WIDTH 210 #define WND_HEIGHT 60 #define WND_MIN_WIDTH 210 #define WND_MIN_HEIGHT 60 #define WND_BORDER_WDT 5 #define WND_TITLE "KEY KODE TEST" #define WND_ICON_TITLE "KEY KODE TEST ICON" #define PRG_CLASS "KEY KODE TEST CLASS" int main (int argc,char* argv [ ]) { int ScreenNum; XEvent Event; Display* pDisplay; GC pGC; Window Wnd; unsigned long gkey; char* buff; buff = (char*)malloc(256); if ((pDisplay = XOpenDisplay(NULL)) == NULL) { puts("Can't connect to XServer!\n"); exit(1); } ScreenNum = DefaultScreen(pDisplay); Wnd = XCreateSimpleWindow(pDisplay, RootWindow(pDisplay,ScreenNum), WND_START_X, WND_START_Y, WND_WIDTH, WND_HEIGHT, WND_BORDER_WDT, BlackPixel(pDisplay,ScreenNum), WhitePixel(pDisplay,ScreenNum)); XSelectInput(pDisplay, Wnd, ExposureMask|KeyPressMask); XMapWindow(pDisplay,Wnd); while(1) { XNextEvent (pDisplay,&Event); switch(Event.type) { case Expose: if (Event.xexpose.count!=0) break; pGC = XCreateGC(pDisplay,Wnd,0,NULL); XSetForeground(pDisplay,pGC,BlackPixel(pDisplay,0)); XClearWindow(pDisplay,Wnd); XDrawString(pDisplay,Wnd,pGC,10,40,buff,strlen(buff)); XFreeGC(pDisplay,pGC); break; case KeyPress: pGC = XCreateGC(pDisplay,Wnd,0,NULL); XClearWindow(pDisplay,Wnd); gkey = Event.xkey.keycode; sprintf(buff,"%d\0",gkey); XDrawString(pDisplay,Wnd,pGC,10,40,buff,strlen(buff)); XFreeGC(pDisplay,pGC); break; } } } назвал ее test.c Попытался откомпилировать ее с помощью команды gcc -o test test.c -lX11 (точно как написано в журнале)

и получил сообщение: /usr/lib/gcc-lib/i486-slackware-linux/3.2.3/../../../../i486-slackware-linux/bin /ld: cannot find -lX11 collect2: ld returned 1 exit status

Выходит, что компилятор ищет libX11.a не в папке /usr/X11R6/lib/ (то есть там, где она действительно лежит - я проверял), а в папке /usr/lib/gcc-lib/.... Что же мне делать? Как заставить прогу компилироваться?

enfundo
()

RSS подписка на новые темы