免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4397 | 回复: 10
打印 上一主题 下一主题

[SCO UNIX] 汗!5.0.7 下 curses 编译出错的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-18 12:17 |只看该作者 |倒序浏览
刚开始学的是ncurses,但ncurses的form表单好像无法处理中文。后来转为curses写程序却编译出错!郁闷死。具体情况如下:
开发环境是:
  sco unix openserver 5.0.7
  GNU Development Tools(系统自带)
  SCO OpenServer Development System(系统自带)
  SCO OpenServer Enterprise System(系统自带)
  UDK 7.1.3

测试用的源代码如下:
#main.cpp
#include <curses.h>
#include <form.h>
#include <locale.h>
#include <string.h>

int main(){
  setlocale(LC_ALL,"POSIX");  
  FIELD *field[3];
  FORM *my_form;

  int ch;

  initscr();
  cbreak();
  noecho();
  keypad(stdscr,TRUE);

  field[0]=new_field(1,10,4,18,0,0);
  field[1]=new_field(1,10,6,18,0,0);
  field[2]=NULL;

  set_field_back(field[0],A_UNDERLINE);
  field_opts_off(field[0],O_AUTOSKIP);

  set_field_back(field[1],A_UNDERLINE);
  field_opts_off(field[1],O_AUTOSKIP);

  my_form=new_form(field);
  post_form(my_form);
  refresh();

  mvprintw(6,10,"Value 2:");
  mvprintw(4,10,"Value 1:");

  refresh();

  while((ch=getch())!=KEY_F(1)){
    switch(ch){
    case KEY_DOWN:
    case '\n':
    case KEY_ENTER:
      form_driver(my_form,REQ_NEXT_FIELD);
      form_driver(my_form,REQ_END_LINE);
      break;
    case KEY_UP:
      form_driver(my_form,REQ_PREV_FIELD);
      form_driver(my_form,REQ_END_LINE);
      break;
    case KEY_LEFT:
      form_driver(my_form,REQ_PREV_CHAR);
      break;
    case KEY_RIGHT:
      form_driver(my_form,REQ_NEXT_CHAR);
      break;
    case KEY_HOME:
      form_driver(my_form,REQ_BEG_LINE);
      break;
    case KEY_END:
      form_driver(my_form,REQ_END_LINE);
      break;
    case KEY_BACKSPACE:
      form_driver(my_form,REQ_DEL_PREV);
      break;
    case KEY_DC:
      form_driver(my_form,REQ_DEL_CHAR);
      break;
    default:
      form_driver(my_form,'-');
      form_driver(my_form,ch);
      break;
    }
  }
  unpost_form(my_form);
  free_form(my_form);
  free_field(field[0]);
  free_field(field[1]);
  endwin();
  return 0;
}

编译命令行:
g++ -o main main.cpp -lform -lcurses

错误提示:
Undefined                first referenced
symbol                              in file
free_field(fieldnode *)                 main.o
field_opts_off(fieldnode *, int)    main.o
new_field(int, int, int, int, int, int)main.o
post_form(formnode *)               main.o
free_form(formnode *)                main.o
unpost_form(formnode *)           main.o
new_form(fieldnode **)              main.o
form_driver(formnode *, int)       main.o
set_field_back(fieldnode *, unsigned long)main.o
ERROR: Symbol referencing errors. No output written to main
collect2: ld returned 1 exit status
*** Error code 1 (bu21)

在线等...

[ 本帖最后由 unixson 于 2008-2-19 11:10 编辑 ]

002.jpg (82.81 KB, 下载次数: 47)

002.jpg

论坛徽章:
0
2 [报告]
发表于 2008-02-18 20:12 |只看该作者
不要用g++,用cc

论坛徽章:
0
3 [报告]
发表于 2008-02-19 08:47 |只看该作者

用cc,CC都不行!

CC命令行:
CC main.cpp -lcurses -lform -omain
显示错误:
undefined                        first referenced
symbol                              in file
new_field(int,int,int,int,int,int)                    /tmp/CC.10078/main.o
set_field_back(fieldnode*,unsigned long)      /tmp/CC.10078/main.o
field_opts_off(fieldnode*,int)       /tmp/CC.10078/main.o
new_form(fieldnode**)             /tmp/CC.10078/main.o
post_form(formnode*)              /tmp/CC.10078/main.o
form_driver(formnode*,int)           /tmp/CC.10078/main.o
unpost_form(formnode*)            /tmp/CC.10078/main.o
free_form(formnode*)              /tmp/CC.10078/main.o
free_field(fieldnode*)            /tmp/CC.10078/main.o
i386ld fatal: Symbol referencing errors. No output written to main


cc命令行:
rename main.cpp main.c #不改名不能编译
cc main.c -lcurses -lform -omain
显示错误:
"main.c", line 8: error: Syntax error before or at: *
"main.c", line 18: error: undefined symbol: field
"main.c", line 18: error: cannot dereference non-pointer type
"main.c", line 18: warning: improper pointer/integer combination: op "="
"main.c", line 19: error: cannot dereference non-pointer type
"main.c", line 19: warning: improper pointer/integer combination: op "="
"main.c", line 20: error: cannot dereference non-pointer type
"main.c", line 22: error: cannot dereference non-pointer type
"main.c", line 22: warning: improper pointer/integer combination: arg #1
"main.c", line 23: error: cannot dereference non-pointer type
"main.c", line 23: warning: improper pointer/integer combination: arg #1
"main.c", line 25: error: cannot dereference non-pointer type
"main.c", line 25: warning: improper pointer/integer combination: arg #1
"main.c", line 26: error: cannot dereference non-pointer type
"main.c", line 26: warning: improper pointer/integer combination: arg #1
"main.c", line 28: error: undefined symbol: my_form
"main.c", line 28: warning: improper pointer/integer combination: arg #1
"main.c", line 28: warning: improper pointer/integer combination: op "="
"main.c", line 29: warning: improper pointer/integer combination: arg #1
"main.c", line 37: error: undefined symbol: ch
"main.c", line 42: warning: improper pointer/integer combination: arg #1
"main.c", line 43: warning: improper pointer/integer combination: arg #1
"main.c", line 46: warning: improper pointer/integer combination: arg #1
"main.c", line 47: warning: improper pointer/integer combination: arg #1
"main.c", line 50: warning: improper pointer/integer combination: arg #1
"main.c", line 53: warning: improper pointer/integer combination: arg #1
"main.c", line 56: warning: improper pointer/integer combination: arg #1
"main.c", line 59: warning: improper pointer/integer combination: arg #1
"main.c", line 62: warning: improper pointer/integer combination: arg #1
"main.c", line 65: warning: improper pointer/integer combination: arg #1
"main.c", line 68: warning: improper pointer/integer combination: arg #1
"main.c", line 69: warning: improper pointer/integer combination: arg #1
"main.c", line 73: warning: improper pointer/integer combination: arg #1
"main.c", line 74: warning: improper pointer/integer combination: arg #1
"main.c", line 75: error: cannot dereference non-pointer type
"main.c", line 75: warning: improper pointer/integer combination: arg #1
"main.c", line 76: error: cannot dereference non-pointer type
"main.c", line 76: warning: improper pointer/integer combination: arg #1

论坛徽章:
0
4 [报告]
发表于 2008-02-19 08:54 |只看该作者
用CC编译时把.o文件先全删了。
sco自带的curses库是COFF格式,gcc编译只支持ELF格式,不生成COFF格式,两者不兼容,所以无法链接。sco的cc不能用来编译cpp文件

论坛徽章:
0
5 [报告]
发表于 2008-02-19 09:13 |只看该作者

谢谢斑竹,但还不行?!

偶没有直接用到.o文件,而是直接从源文件编译的呀?

删除了当前目录下的*.o文件,删除/tmp下的所有文件。
CC main.cpp -lcurses -lform -omain
结果还是老样子。会不会是我系统的问题?
在/lib下有:
libcurses.so
libcurses.a
libform.a
没有libform.so文件,会不会是这个原因?

[ 本帖最后由 unixson 于 2008-2-19 11:11 编辑 ]

001.jpg (61.77 KB, 下载次数: 42)

001.jpg

论坛徽章:
0
6 [报告]
发表于 2008-02-19 11:32 |只看该作者

真没办法了?

偶现在重装系统,没办法。

论坛徽章:
0
7 [报告]
发表于 2008-02-19 14:11 |只看该作者
没有libform.so没关系
另外,ncurses完全可以支持中文,而且我个人感觉比SCO自带的curses库要好用。
在ncurses中使用中文需要调用meta(win,TRUE),这个在SCO下也应该是一样的

论坛徽章:
0
8 [报告]
发表于 2008-02-19 16:15 |只看该作者
ncurses能支持中文?关于ncurses中文处理,我再开一贴。

[ 本帖最后由 unixson 于 2008-2-19 16:16 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-02-19 19:58 |只看该作者

疯了,重装系统一样没戏!!

重装了一遍系统,sco5.07,development System,Linker and Application Development Libraries
CC main.cpp -lform -lcurses

仍然提示相同的错误!

论坛徽章:
0
10 [报告]
发表于 2008-02-25 10:02 |只看该作者

回复 #9 unixson 的帖子

到老外论坛上问了下,终于搞定了!!谢谢各位的帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP