ncurses Oracle Proc 项目总结及环境配置

本文档详细记录了ncurses环境配置、Oracle安装过程以及解决中文乱码问题的经验。在Ubuntu上配置ncurses时需要注意头文件的区别,并确保使用-ncursesw编译选项以支持中文。Oracle安装时,通过设置LANGU=en_US运行安装向导避免中文乱码。最终通过编写Makefile完成项目的构建,并推荐使用PuTTY避免WinXP telnet的中文乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、背景

2013年8月1日,telnet手持要求添加新功能,新接手这个makefile,对先前的makefile不甚了解加上客户那边使用的是curses,我在ubuntu上使用的是后来的ncurses,使用方法虽然一致,但是头文件不太相同,编译方法也有区别,于是花气力在这台烂机器上安装虚拟机继而安装oracle、ncurses,然后重新写下这个makefile文件。建议后来人找台好点的机器,oracle客户和服务端全部安装,比单独安装客户端省事太多了(全部安装对内存大小有限制)心得:工欲善其事必先利其器(去年买了个表,真想踩死这台烂电脑),你们能想象的到配置环境比开发时间都长?

 

2、curses /ncurses环境配置

curses就是一套兼容性强的显示库(字符显示,就像控制台或者终端)介绍就不说了

安装ncurses,终端里输入:
1、sudo apt-get update
2、apt-get install libncurses5-dev libncurses5 libncurses5-dbg (记得好像还要安装ncursesw版本的)

在home目录里新建文件夹curses_test,然后新建test.c、makefile,内容如下:

 //test.c
#include </usr/include/ncursesw/ncurses.h>
#include <locale.h>
int main()
{
	setlocale(LC_ALL,"");
	initscr();
	printw("Hello World!!用户_密码");
	mvaddstr(0,30,"中温暖");
	refresh();
	getch();
	endwin();
	return 0;
}
#makefile
#Source file
SRC = test.c
#Object file
OBJ = $(SRC:.c=.o)
#Output execution file
PROGRAM = test
#Compiler
CC = cc
#Include
INCLUDE = -I/usr/include/ncursesw
#Linker Parameter
LINKPARAM = -lncursesw -lpthread
#Options for development
#CFLAGS = -g
#Options for release
CFLAGS = -o
all: $(PROGRAM)
$(PROGRAM): $(OBJ)
	$(CC) $(CFLAGS) $(PROGRAM) $(LINKPARAM) $(OBJ)
.SUFFIXES : .c.o
.c.o: 
	$(CC) $(INCLUDE) $(CFLAGS) $@ $^ -c
clean:
	-rm *.o


然后,终端进入curses_test,输入,make clean && make &&  ./test,程序运行后如果中文没有乱码,说明curses环境配置通过。make clean 清除中间文件,make编译链接生成可执行文件,./test运行当前目录下的test程序。注意头文件的ncursesw,宽字符的才能显示中文。注意编译选项-ncursesw 

 

3、oracle安装

运行安装文件时,加上LANGU=en_US ./runInstaller 可解决安装向导中文乱码问题;

安装的过程,网上找一下,涉及环境变量以及缺少开发包的安装;

安装完毕后,添加tns;

使用sqlplus username/password@dbname登陆数据库,成功则说明OK;
使用Proc预编译pc文件,简单说pc文件是我们编写用来查询执行sql的,Proc负责将我们的PC文件预编译成.c文件,方便我们程序连接数据库。具体介绍问度娘。
在home下,新建proc_test文件夹,创建main.pc,makefile,内容如下:
 
//main.pc #include "sqlca.h" #include <stdio.h> #include <string.h> #include <stdlib.h> void sql_error(char *msg) { printf("/n%s %s/n", msg,(char *)sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK RELEASE; exit(0); } int main() { EXEC SQL INCLUDE sqlca; EXEC ORACLE OPTION (RELEASE_CURSOR = YES); EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> "); EXEC SQL BEGIN DECLARE SECTION; VARCHAR oraCN[30]; EXEC SQL END DECLARE SECTION; strcpy(oraCN.arr,"ctplan/ok@tserver5"); oraCN.len = strlen(oraCN.arr); oraCN.arr[oraCN.len]='/0'; EXEC SQL CONNECT :oraCN; printf("/n [OK Connected!] "); return 0; } 
#makefile
#Source file
SRC = main.c
#Object file
OBJ = $(SRC:.c=.o)
#Output execution file
PROGRAM = main
#Compiler
CC = gcc
#Include
INCLUDE = -I/opt/ora10/precomp/public
#Linker Parameter
LINKPARAM = -L/opt/ora10/lib -lclntsh
#Options for development
#CFLAGS = -g
#Options for release
CFLAGS = -o
all: $(PROGRAM)
$(PROGRAM): $(OBJ)
	$(CC) -o $(PROGRAM) $(LINKPARAM) $(OBJ)	
.SUFFIXES : .c
.c.o:
	$(CC) $(INCLUDE) $(CFLAGS) $@ $^ -c
clean:
	-rm *.o

终端进入,该目录,输入make clean && make && ./main,运行显示OK Connected!说明Proc环境通过

4、中文乱码问题

程序,中文显示还是乱码,这是因为终端编码问题
 

http://bbs.chinaunix.net/thread-2305193-1-1.html

<a data-cke-saved-href="http://blog.163.com/wangdong8213@126/blog/static/458523662013311103935992/" href="http://blog.163.com/wangdong8213@126/blog/static/458523662013311103935992/">http://blog.163.com/wangdong8213@126/blog/static/458523662013311103935992/</a>

winxP telnet到ubuntu上,中文乱码,可以使用putty

5、项目完整的Makefile

#Source file
SRC = cthandset.c ctdb.c zbutton.c
#Object file
OBJ = $(SRC:.c=.o) 
#Output execution file
PROGRAM = hand
#Compiler
CC = gcc
#Include
INCLUDE = -I/opt/ora10/precomp/public -I/usr/include/ncursesw -I/usr/include/
#Linker Parameter
LINKPARAM = -lncursesw -L/opt/ora10/lib -lclntsh 
#Options for development
//CFLAGS = -g
#Options for release
CFLAGS = -o
#Proc Set
USERID=ct123/123@tservertest
PROC_FLAGS= sqlcheck=SEMANTICS userid=$(USERID) DBMS=V8 UNSAFE_NULL=YES 

all: $(PROGRAM)
$(PROGRAM): $(OBJ)
	$(CC) $(CFLAGS) $(PROGRAM) $(LINKPARAM) $(OBJ)
ctdb.c:
	proc $(PROC_FLAGS) iname=ctdb.pc
.SUFFIXES : .c.o
.c.o: 
	$(CC) $(INCLUDE) $(CFLAGS) $@ $^ -c

clean:
	-rm *.o ctdb.c tp*

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值