| [ LinuxFreeBSD ] in KIDS 글 쓴 이(By): burp (spider) 날 짜 (Date): 1999년 5월 18일 화요일 오후 08시 37분 36초 제 목(Title): [Q]모티프 링크하기 III 모티프로 풀다운 메뉴를 만드는 예제를 공부중입니다. 링크할때 계속 다음과 같은 에러가 납니다 ------------------------------------------------------------------------ g++ -g menu.cc -I/usr/X11R6/include menu.cc: In function `int main(int, char **)': menu.cc:114: warning: passing `unsigned int *' as argument 5 of `XtAppInitialize(_XtAppStruct **, const char *, XrmOptionDescRec *, unsigned int, int *, char **, char **, Arg *, unsigned int)' changes signedness /tmp/cca012751.o: In function `CreatePushbutton(_WidgetRec *, char *, void (*)(_WidgetRec *, void *, void *), void *)': /home/goopy/coding/menu/menu.cc:18: undefined reference to `XmCreatePushButton' /home/goopy/coding/menu/menu.cc:24: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:24: undefined reference to `XtAddCallback' /home/goopy/coding/menu/menu.cc:25: undefined reference to `XtManageChild' /tmp/cca012751.o: In function `CreatePulldownMenu(_WidgetRec *, char *)': /home/goopy/coding/menu/menu.cc:51: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:55: undefined reference to `XmCreatePulldownMenu' /home/goopy/coding/menu/menu.cc:57: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:58: undefined reference to `XmCreateCascadeButton' /home/goopy/coding/menu/menu.cc:57: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:58: undefined reference to `XmCreateCascadeButton' /home/goopy/coding/menu/menu.cc:60: undefined reference to `XtManageChild' /tmp/cca012751.o: In function `CreateHelpMenu(_WidgetRec *, char *)': /home/goopy/coding/menu/menu.cc:78: undefined reference to `XmCreatePulldownMenu' /home/goopy/coding/menu/menu.cc:81: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:82: undefined reference to `XmCreateCascadeButton' /home/goopy/coding/menu/menu.cc:84: undefined reference to `XtManageChild' /home/goopy/coding/menu/menu.cc:86: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:86: undefined reference to `XtVaSetValues' /tmp/cca012751.o: In function `main': /home/goopy/coding/menu/menu.cc:106: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:114: undefined reference to `XtAppInitialize' /home/goopy/coding/menu/menu.cc:117: undefined reference to `XmCreateMainWindow' /home/goopy/coding/menu/menu.cc:121: undefined reference to `XmCreateMenuBar' /home/goopy/coding/menu/menu.cc:122: undefined reference to `XtManageChild' /home/goopy/coding/menu/menu.cc:134: undefined reference to `xmSeparatorWidgetClass' /home/goopy/coding/menu/menu.cc:134: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:134: undefined reference to `xmSeparatorWidgetClass' /home/goopy/coding/menu/menu.cc:134: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:140: undefined reference to `xmSeparatorWidgetClass' /home/goopy/coding/menu/menu.cc:140: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:146: undefined reference to `XmCreateSeparator' /home/goopy/coding/menu/menu.cc:150: undefined reference to `xmSeparatorWidgetClass' /home/goopy/coding/menu/menu.cc:150: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:158: undefined reference to `xmSeparatorWidgetClass' /home/goopy/coding/menu/menu.cc:158: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:195: undefined reference to `_XmStrings' /home/goopy/coding/menu/menu.cc:195: undefined reference to `XtVaSetValues' /home/goopy/coding/menu/menu.cc:197: undefined reference to `xmSeparatorWidgetClass' /home/goopy/coding/menu/menu.cc:197: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:197: undefined reference to `xmSeparatorWidgetClass' /home/goopy/coding/menu/menu.cc:197: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:204: undefined reference to `xmLabelWidgetClass' /home/goopy/coding/menu/menu.cc:204: undefined reference to `XtVaCreateManagedWidget' /home/goopy/coding/menu/menu.cc:211: undefined reference to `XmMainWindowSetAreas' /home/goopy/coding/menu/menu.cc:212: undefined reference to `XtManageChild' /home/goopy/coding/menu/menu.cc:215: undefined reference to `XtRealizeWidget' /home/goopy/coding/menu/menu.cc:216: undefined reference to `XtAppMainLoop' collect2: ld returned 1 exit status make: *** [menu.o] Error 1 make: Target `test' not remade because of errors. ----------------------------------------------------------------------------- 예전과 똑같은 옵션을 주었는데 그건 되고 요번 건 안됩니다. 뭐가 잘 못된 건지 알 수가 없읍니다. 소스코드와 Makefile은 담과 같읍니다. ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ####################################################### #test # ####################################################### test:menu.o g++ menu.o -o test -L/usr/X11R6/lib -lXm -lXmu -lXt -lX11 menu.o: menu.cc g++ -g menu.cc -I/usr/X11R6/include ----------------------------------------------------------------------------- #include <stdio.h> #include <Xm/Xm.h> #include <Xm/CascadeB.h> #include <Xm/Label.h> #include <Xm/MainW.h> #include <Xm/PushB.h> #include <Xm/RowColumn.h> #include <Xm/PushB.h> #include <Xm/RowColumn.h> #include <Xm/Separator.h> Widget CreatePushbutton(Widget parent, char *name, XtCallbackProc callback, XtPointer client_data) { Widget push; Arg args[20]; Cardinal n; n = 0; push = XmCreatePushButton(parent, name, args, n); // Set up callback XtAddCallback(push, // widget XmNactivateCallback, // which callback callback, //callback function client_data); //extra data to pass XtManageChild(push); return push; } return push; } void exitCB(Widget widget, XtPointer client_data, XtPointer call_data) { exit(0); } void genericCB(Widget widget, XtPointer client_data, XtPointer call_data) { if(client_data != NULL) { printf("Menu callback for[%s]\n", (char*)client_data); } } Widget CreatePulldownMenu(Widget parent, char* name) { Widget menu; Widget cascade; Arg args[20]; Cardinal n; n = 0; n = 0; #ifdef XmNtearOffModel XtSetArg(args[n], XmNtearOffModel, XmTEAR_OFF_ENABLED); n++; #endif menu = XmCreatePulldownMenu(parent, name, args, n); n=0; XtSetArg(args[n], XmNsubMenuId, menu); n++; cascade = XmCreateCascadeButton(parent, name, args, n); XtManageChild(cascade); return menu; } Widget CreateHelpMenu(Widget parent, char* name) { Widget menu; Widget cascade; Arg args[20]; Cardinal n; Arg args[20]; Cardinal n; n = 0; #ifdef XmNtearOffModal XtSetArg(args[n], XmNtearOffModel, XmTEAR_OFF_ENABLED); n++; #endif menu = XmCreatePulldownMenu(parent, name, args, n); n = 0; XtSetArg(args[n], XmNsubMenuId, menu); n++; cascade = XmCreateCascadeButton(parent, name, args, n); XtManageChild(cascade); XtVaSetValues(parent, XmNmenuHelpWidget, cascade, NULL); return menu; } int main(int argc, char** argv) int main(int argc, char** argv) { XtAppContext app_context; Widget parent; Widget mainwindow; Widget menubar; Widget filemenu, editmenu, submenu; Widget helpcascade, helpmenu; Widget exitchoice; Widget label, on_context; Arg args[20]; Cardinal n; // Initialize X toolkit n = 0; XtSetArg(args[n], XmNallowResize, True); n++; parent = XtAppInitialize(&app_context, "Ppm", (XrmOptionDescList) NULL, 0, (Cardinal*) &argc, argv, (Cardinal*) &argc, argv, (String*) NULL, args, n); // Create Main Window n = 0; mainwindow = XmCreateMainWindow(parent, "main", args, n); // Create menubar n = 0; menubar = XmCreateMenuBar(mainwindow, "menubar", args, n); XtManageChild(menubar); // Create File, Edit and Help menus filemenu = CreatePulldownMenu(menubar, "filemenu"); editmenu = CreatePulldownMenu(menubar, "editmenu"); // Set up menu choices for File menu CreatePushbutton(filemenu, "new", (XtCallbackProc)genericCB, (XtPointer)"New"); CreatePushbutton(filemenu, "open", (XtCallbackProc)genericCB, (XtPointer)"Open.."); (void) XtVaCreateManagedWidget("sep", (XtCallbackProc)genericCB, (XtPointer)"Open.."); (void) XtVaCreateManagedWidget("sep", xmSeparatorWidgetClass, filemenu, NULL); (void) CreatePushbutton(filemenu, "save", (XtCallbackProc)genericCB, (XtPointer)"Save"); (void) CreatePushbutton(filemenu, "saveas", (XtCallbackProc)genericCB, (XtPointer)"Save As.."); (void) XtVaCreateManagedWidget("sep", xmSeparatorWidgetClass, filemenu, NULL); // Set up cascade submenu as child of file menu submenu = CreatePulldownMenu(filemenu, "submenu"); n = 0; (void) XmCreateSeparator(filemenu, "sep", args, n); (void) CreatePushbutton(filemenu, "print", (XtCallbackProc)genericCB, (XtPointer)"Print.."); (void) XtVaCreateManagedWidget("sep", xmSeparatorWidgetClass, filemenu, NULL); (void) CreatePushbutton(filemenu, "exit", (XtCallbackProc)genericCB, (XtPointer)"Exit"); // Set up menu choices for Edit menu // Set up menu choices for Edit menu (void) CreatePushbutton(editmenu, "undo", (XtCallbackProc)genericCB, (XtPointer)"Undo"); (void) XtVaCreateManagedWidget("sep", xmSeparatorWidgetClass, editmenu, NULL); (void) CreatePushbutton(filemenu, "cut", (XtCallbackProc)genericCB, (XtPointer)"Cut"); (void) CreatePushbutton(filemenu, "copy", (XtCallbackProc)genericCB, (XtPointer)"Copy"); (void) CreatePushbutton(filemenu, "paste", (XtCallbackProc)genericCB, (XtPointer)"Paste"); // Set up menu choices for submenu (void) CreatePushbutton(submenu, "sgml", (XtCallbackProc)genericCB, (XtPointer) "SGML..."); (void) CreatePushbutton(submenu, "rtf", (XtCallbackProc)genericCB, (XtPointer) "Rich Text Format..."); (void) CreatePushbutton(submenu, "mif", (XtCallbackProc)genericCB, (XtPointer) "Marker Interchange Format..."); (XtCallbackProc)genericCB, (XtPointer) "Marker Interchange Format..."); /* Create Help menu. Note XmNmenuHelpWidget resource and long method to create */ helpmenu = CreateHelpMenu(menubar, "helpmenu"); // Set up menu choices for Help menu on_context = CreatePushbutton(helpmenu, "context", (XtCallbackProc) genericCB, (XtPointer) "On Context"); /* Set an accelerator. Normally, you should set this in an X resource file. */ XtVaSetValues(on_context, XmNaccelerator, "Ctrl<Key>q", NULL); (void) XtVaCreateManagedWidget("sep", NULL); (void) XtVaCreateManagedWidget("sep", xmSeparatorWidgetClass, helpmenu, NULL); (void) CreatePushbutton(helpmenu, "version", (XtCallbackProc) genericCB, (XtPointer) "On Version"); // Create label label = XtVaCreateManagedWidget("label", xmLabelWidgetClass, mainwindow, NULL); // Set widgets into proper areas in main window XmMainWindowSetAreas(mainwindow , menubar, (Widget) NULL, (Widget) NULL, (Widget) NULL, label); XtManageChild(mainwindow); // Realize widgets and enter event loop. XtRealizeWidget(parent); XtAppMainLoop(app_context); XtAppMainLoop(app_context); return 0; } // main |