pro*c下的curses编译问题

znevq 2012-05-30 12:53:03
我的系统是red flag linux 6.0 sp3
在编译以下程序中出现的错误是
使用Makefile编译.pc文件出错,但把.pc文件中的头文件#include<curses.h>去掉即可生成.c文件
然后再gcc编译.c文件即可生成目标输出文件,并且可以正常运行
不知道是不是pro*c和curses之间的问题,还是我环境设置的有问题
具体程序见下:
...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
znevq 2012-05-30
  • 打赏
  • 举报
回复
补充说明:
程序绝对是正确的,主要就是头文件在使用Proc编译的时候出现问题了
讲师用的是radhatlinux系统,顺利编译通过并且可以运行,而我的出现以上错误
现在就使纠结这问题能否解决,还是只有照的方法分2步编译?
znevq 2012-05-30
  • 打赏
  • 举报
回复
然后注释掉demo4.pc头文件中的#include<curses.h>
输入下面内容,顺利生成demo.c文件
proc demo4 \
include=/usr/lib/gcc-lib/i386-redflag-linux/3.2.3/include \
include=${ORACLE_HOME}/rdbms/public \
include=${ORACLE_HOME}/precomp/public
然后打开demo4.c文件,把其中被注释掉的#include<curses.h>取消注释

然后输入下面内容编译
gcc demo4.c -omain \
-L/home/Proc/oracle/product/10.2.0/client_1/lib \
-L/u01/app/oracle/product/10.2.0/client_1/lib/ -lclntsh \
-I${ORACLE_HOME}/rdbms/public \
-I${ORACLE_HOME}/precomp/public \
-lcurses
编译通过,生成可执行文件main,且可以正常运行!
znevq 2012-05-30
  • 打赏
  • 举报
回复
demo4.pc文件:
*******************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
#include <curses.h>
/*MVC*/
/*一.数据库模块:业务逻辑Model*/
/*1.打开数据库*/
int initDb();
/*2.关闭数据库*/
void closeDb();
/*3.查询数据库*/
/*4.更新添加删除数据库*/

/*二.cursesUI模块:数据显示View*/
void initUi();
/*1.主菜单UI*/
void showMainMenu();
/*选择菜单*/
int chooseMainMenu();
/*释放UI*/
void destroyUi();
/*2.查询UI*/
void showQueryUi();
int inputId();/*输入查询的ID*/
void queryAndShow(int id);/*查询并*/
int isContinue();
/*三.主流程框架:控制数据显示与后台数据一致Control*/
int choose;
int id;
int iscon;
int ison=1;
int r;
int curmenu=0;
int main()
{
initUi();
/*
r=initDb();
if(r==-1)
{
ison=0;
}
*/
while(ison)
{
/*1.显示主菜单*/
showMainMenu();
/*2.选择主菜单*/
choose=chooseMainMenu();
switch(choose)
{
case 0:
/*3.如果选择是回车,则根据选择切换到查询界面*/
showQueryUi();
while(1)
{
/*3.1.输入查询ID*/
id=inputId();
/*3.2.显示查询结果*/
queryAndShow(id);
/*3.3.是否继续查询*/
iscon=isContinue();
if(iscon==0) break;
}
/*3.4.否则切换到主菜单*/
break;
case 1:
ison=0;
break;
}
}
/*
closeDb();
*/
destroyUi();
}
int initDb()
{
char *acct="openlab/open123";
exec sql connect :acct;
if(sqlca.sqlcode==0)
return 0;
else
return -1;
}

void closeDb()
{
exec sql whenever sqlerror continue;
exec sql commit release;
}

void initUi()
{
initscr();
curs_set(0);
keypad(stdscr,TRUE);
noecho();

}

void showMainMenu()
{
char *menu[2]={
"查询数据",
"退出系统"
};
clear();
if(curmenu==0)
{
attron(A_REVERSE);
mvaddstr(5,(COLS-strlen(menu[0]))/2,menu[0]);
attroff(A_REVERSE);
mvaddstr(7,(COLS-strlen(menu[1]))/2,menu[1]);
}
if(curmenu==1)
{
mvaddstr(5,(COLS-strlen(menu[0]))/2,menu[0]);
attron(A_REVERSE);
mvaddstr(7,(COLS-strlen(menu[1]))/2,menu[1]);
attroff(A_REVERSE);
}
refresh();
}

int chooseMainMenu()
{
int inp;
while(1)
{
inp=getch();
if(inp==KEY_UP)
{
curmenu--;
if(curmenu<0)
{
curmenu=1;
}
}
if(inp==KEY_DOWN)
{
curmenu++;
if(curmenu>1)
{
curmenu=0;
}
}
if(inp==10)/*回车键10*/
{
break;
}

showMainMenu();
}
return curmenu;
}

void destroyUi()
{
endwin();
}

void showQueryUi()
{
clear();
}
int inputId()
{
}
void queryAndShow(int id)
{
}
int isContinue()
{
}
*******************************************************
Makefile:
*******************************************************
demo4:
proc demo4 \
include=/usr/lib/gcc-lib/i386-redflag-linux/3.2.3/include \
include=${ORACLE_HOME}/rdbms/public \
include=${ORACLE_HOME}/precomp/public


gcc demo4.c -omain \
-L/home/Proc/oracle/product/10.2.0/client_1/lib \
-L/u01/app/oracle/product/10.2.0/client_1/lib/ -lclntsh \
-I${ORACLE_HOME}/rdbms/public \
-I${ORACLE_HOME}/precomp/public \
-lcurses
*******************************************************
maked的时候显示下面错误信息:
*******************************************************
proc demo4 \
include=/usr/lib/gcc-lib/i386-redflag-linux/3.2.3/include \
include=/u01/app/oracle/product/10.2.0/client_1/rdbms/public \
include=/u01/app/oracle/product/10.2.0/client_1/precomp/public \


Pro*C/C++: Release 10.2.0.1.0 - Production on Wed May 30 12:34:42 2012

Copyright (c) 1982, 2005, Oracle. All rights reserved.

System default option values taken from: /u01/app/oracle/product/10.2.0/client_1/precomp/admin/pcscfg.cfg

Syntax error at line 381, column 2, file /usr/include/curses.h:
Error at line 381, column 2 in file /usr/include/curses.h
bool _notimeout; /* no time out on function-key entry? */
.1
PCC-S-02201, Encountered the symbol "_Bool" when expecting one of the following:

} char, const, double, enum, float, int, long, ulong_varchar,
OCIBFileLocator OCIBlobLocator, OCIClobLocator, OCIDateTime,
OCIExtProcContext, OCIInterval, OCIRowid, OCIDate, OCINumber,
OCIRaw, OCIString, short, signed, sql_context, sql_cursor,
struct, union, unsigned, utext, uvarchar, varchar, void,
volatile, a typedef name,

Syntax error at line 0, column 0, file demo4.pc:
Error at line 0, column 0 in file demo4.pc
PCC-S-02201, Encountered the symbol "<eof>" when expecting one of the following:

; : an identifier, end-exec, random_terminal

Error at line 0, column 0 in file demo4.pc
PCC-F-02102, Fatal error while doing C preprocessing
make: *** [demo4] 错误 1
*******************************************************

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧