LinuxFreeBSD

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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

 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.