ChinaUnix.net
 >> ChinaUnix.net > SCO

完全编译cdk-4.9.10

作者:samhoo     发表时间:2002/09/24 09:01pm

[这个贴子最后由samhoo在 2002/09/24 09:24pm 编辑]

说明:CDK(Curses Development Kit http://www.vexus.ca/products/CDK/)是一套基于curses的免费窗体开发库。

编译cdk-4.9.10典型错误:
1)在编译库的时候报告S_ISSOCK定义冲突,但还是可以把libcdk.a编译出来。可是,在examples编译的时候就报告S_ISSOCK函数找不到了。
2)报告找不到/usr/bin/install-sh。
3)如果你安装了ncurses库,在编译examples会报告:w32addch, w32...等函数找不到

下面给出解决方法:
*下面的描述假定ncuses库在缺省目录/usr/local/lib, /usr/local/include/ncuses下
1)在include目录下添加一个头文件macro_define.h,内容如下:
#ifndef __MACRO_DEFINE_H__
#define __MACRO_DEFINE_H__

#ifndef S_IFMT
#   ifdef _S_IFMT
#   define S_IFMT _S_IFMT
#   else
#   define S_IFMT 0170000
#   endif
#endif

#ifndef S_ISDIR
#   define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
#endif

#ifndef S_ISCHR
#   define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
#endif

#ifndef S_ISBLK
#   ifdef S_IFBLK
#   define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
#   else
#   define S_ISBLK(m) (0)
#   endif
#endif

#ifndef S_ISREG
#   define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
#endif

#ifndef S_ISFIFO
#   ifdef S_IFIFO
#   define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
#   else
#   define S_ISFIFO(m) (0)
#   endif
#endif

#ifndef S_ISLNK
#   ifdef _S_ISLNK
#   define S_ISLNK(m) _S_ISLNK(m)
#   else
#   ifdef _S_IFLNK
#       define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
#   else
#       ifdef S_IFLNK
#       define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
#       else
#       define S_ISLNK(m) (0)
#       endif
#   endif
#   endif
#endif

#ifndef S_ISSOCK
#   ifdef _S_ISSOCK
#   define S_ISSOCK(m) _S_ISSOCK(m)
#   else
#   ifdef _S_IFSOCK
#       define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
#   else
#       ifdef S_IFSOCK
#       define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
#       else
#       define S_ISSOCK(m) (0)
#       endif
#   endif
#   endif
#endif

#endif /*  __MACRO_DEFINE_H__ */

2)修改include/cdk.h
在54行:#include <math.h>后面添加一行
#include "macro_define.h"

3)如果你没有安装ncurses库,你可以略过本步骤。
修改Makefile.in文件36行为:
CFLAGS      = -Iinclude -I/usr/local/include/ncurses @CFLAGS@ @DEFS@
修改examples/Makefile.in文件第7行为:
INCDIR  = -I.. -I../include -I/usr/local/include/ncurses

4)然后就可以按常规的进行编译了:
$INSTALL="./install-sh -c";export $INSTALL;configure;make;make install;
cd examples;make

上述方法在SCO OpenServer 5.0.5 + gcc-2.95.2 + ncurses-5.2上无错编译成功,例子运行正常。
如果是cuses库,而不是ncuses库,编译出来的例子运行显示的画面缺少右边和下边的底线

有例子viewer_ex运行的画面,谁要?


此文章相关评论:
该文章有34个相关评论如下:(点这儿可以发表评论)
wkl 发表于: 2002/09/24 09:03pm
good! please give me one
sh_wkl@163.com
thank!
 
sdccf 发表于: 2002/09/24 09:03pm
Please give me a copy.
sdccf@yeah.net
 
samhoo 发表于: 2002/09/24 09:10pm
sent.
 
sycred 发表于: 2002/09/25 09:12am
me
bootos@sina.com
 
xm111 发表于: 2002/09/25 09:31am
给我一份,unix.xm@163.com
 
xm111 发表于: 2002/09/25 09:34am
ncuses库在那儿可以下载啊?
 
fghao 发表于: 2002/09/25 09:36am
我也要!fghao@sohu.com
 
JiaJunZheng 发表于: 2002/09/25 10:02am
恭喜、恭喜,望CDK给你带来的不仅是便利,更是一种思想!
 
samhoo 发表于: 2002/09/25 10:15am
to JiaJunZheng:
老实说我觉得象cdk这样的工具在web横行的时代里,可以生存的空间很小。至于它的思想,我相信对我的启发不会超过Borland TurboVision,或者windows,尽管我在两天前刚知道有这么一个工具(就是我注册本论坛的那天啦)。

假如有人希望借助cdk作为公司的前台用户界面的开发库,我想这是错误的方向--复杂的客户端没有希望。而传统的复杂前端开发库几乎每个系统集成公司(甚至银行)都有,如联想的ace,南天的...。

 
kesine 发表于: 2002/09/25 10:36am
终于知道CDK是什么了:)
 
JiaJunZheng 发表于: 2002/09/25 10:45am
说实话,我并不提倡用CDK,作为前台用户界面,我也一直在使用我的开发库,因为习惯和熟悉吧,这里我不想过多的谈论web,web核心是构件和应用服务,如果你有兴趣,如果你工作需要(比如你在金融部门等),如果你没有这样的平台,不要指望Ace,联想已让我们不再联想;南天,尚在期待 !何不,了解一下,记得牛顿有这样一句话:我是站在巨人的肩膀上的。我想:软件业也需如此!
 
samhoo 发表于: 2002/09/25 10:58am
联想ace,南天这样的复杂前端开发工具不会太久就会结束他们的使命,退出市场。

因为不幸,他们遭遇web时代。web所影响的不仅仅是服务端,web体系以它特有的方式--浮躁然后归于理性--影响了整个软件业。你不仅会发现越来越多的应用通过http进行运载(如目前的SOAP的对http的支持是最好的),而且发现越来越多的软件以web的方式展现在你的面前。这就是web的影响,方方面面,无所不在。向web迁移是我们必然的归宿。

 
samhoo 发表于: 2002/09/25 01:16pm
补充一下:上面macro_define.h的代码是从perl-5.6.1的perl.h中摘抄的。

to xm111:
ncusese(http://www.gnu.org/software/ncurses/ncurses.html)

 
sdccf 发表于: 2002/09/25 01:18pm
谢谢!
 
zdaq 发表于: 2002/09/25 02:13pm
我也要!zdaq@sina.com
 
xm111 发表于: 2002/09/25 04:18pm
[quote][b]下面引用由[u]samhoo[/u]在 [i]2002/09/25 01:16pm[/i] 发表的内容:[/b]
补充一下:上面macro_define.h的代码是从perl-5.6.1的perl.h中摘抄的。
to xm111:
ncusese(http://www.gnu.org/software/ncurses/ncurses.html)
[/quote]
非常感谢samhoo
 
fghao 发表于: 2002/09/25 05:29pm
请问你用SCOUNIX5.0.5的CC和CURSES库编译成功了吗?
 
samhoo 发表于: 2002/09/25 07:52pm
试了一下cc + curses也是可以的。

方法如下:
1)仍依照前文增加macro_define.h,修改cdk.h
*不要修改Makefile.in examples/Makefile.in了。
2)export INSTALL="./install-sh -c"; export CC=cc;rm -f config.*;configure;make;make install;cd examples;make
(如果你有gcc,而又不想用gcc编译,请暂时办gcc改名)

这样编译也是无错通过,但是就如前面提到的,运行的例子缺右边和下边框。

 
MermaidS 发表于: 2002/09/25 08:27pm
:em33:  :em33:
 
fghao 发表于: 2002/09/26 04:52pm
小弟经过各位高手的不断帮助,已经在SCO下用CC和CURSES编译CDK成功,果然如各位所说,右边和下边少了线框.
但小弟用CC和NCURSES库编译时,却无法成功.不知哪位高手已经编译成功?能否将NCURSES库编译后的libcdk.a发给小弟.如果可以,将编译后的NCURSES库文件也给小弟发一份.
fghao@sohu.com
 
fghao 发表于: 2002/09/26 05:07pm
up
 
fghao 发表于: 2002/09/26 05:55pm
upup
 
samhoo 发表于: 2002/09/26 07:29pm
ncurses 用到了一些gcc提供的、sco没有的头文件,所以无法编译,而且ncurses5.2要打上5个patch才顺利编译过去。

sent.

 
backfire 发表于: 2002/09/29 04:50pm
400@21cn.com
 
longtor 发表于: 2002/09/29 06:41pm
我想要,谢了。
My E-mail: longtor@163.com
 
fghao 发表于: 2002/09/30 04:49pm
小弟近日在SCO下用cc和curses重新编译了CDK,结果发现并没有缺少线框的现象.
 
samhoo 发表于: 2002/09/30 05:03pm
你用的sco 版本是多少?
 
fghao 发表于: 2002/09/30 05:19pm
5.0.5。小弟刚刚重装的。没有GCC和NCURSES。
 
samhoo 发表于: 2002/09/30 05:26pm
确是古怪,不如把uname -X; env 的结果贴上来看看。
 
fghao 发表于: 2002/09/30 05:42pm
小弟建了一个用户,用KSH,将CDK.tar文件tar开后,在CDK目录中建一个SH文件,文件内容就是上面要执行的命令。然后运行SH文件,编译过程和小弟第一次编译的过程不太一样。其它并没有做什么特别的。
 
samhoo 发表于: 2002/09/30 05:48pm
有意思的问题。
如果手边有环境,还是把
uname -X
env
的结果贴上来看看把,我的环境装了许多东西,可能会有影响,贴上来比较看看有助于找出原因。
 
fghao 发表于: 2002/09/30 07:53pm
请看下边
uname -X的结果:
System = SCO_SV
Node = scosysv
Release = 3.2v5.0.5
KernelID = 98/07/02
Machine = i80386
BusType = ISA
Serial = 2FA011902
Users = 128-user
OEM# = 0
Origin# = 1
NumCPU = 1

env环境:
_=/bin/env
HZ=100
PATH=/bin:/usr/bin:/usr/hfg/bin:.
HUSHLOGIN=FALSE
LOGNAME=hfg
MAIL=/usr/spool/mail/hfg
PS1=!$
SHELL=/bin/ksh
HOME=/usr/hfg
TERM=scoansi
PWD=/usr/hfg
TZ=CST-8
ENV=/usr/hfg/.kshrc

Makefile:
# Generated automatically from Makefile.in by configure.
# $Id: Makefile.in,v 1.13 2002/07/19 00:56:40 tom Exp $
#
# Makefile for the examples directory.
#
SHELL= /bin/sh

prefix= /usr/local
exec_prefix= ${prefix}

srcdir= .

LIBS= ../libcdk.a -lcurses
LDFLAGS=

LIBTOOL=
CC= cc
LINK= $(LIBTOOL) $(CC)
x=

CFLAGS= -g
CPPFLAGS= -DHAVE_CONFIG_H -I../include -I$(srcdir)/../include

BINS= \
alphalist_ex$x \
bind_ex$x \
buttonbox_ex$x \
calendar_ex$x \
cdkscreen_ex$x \
dialog_ex$x \
entry_ex$x \
fscale_ex$x \
fselect_ex$x \
graph_ex$x \
hello_ex$x \
histogram_ex$x \
itemlist_ex$x \
label_ex$x \
lowerCDKObject_ex$x \
marquee_ex$x \
matrix_ex$x \
mentry_ex$x \
menu_ex$x \
position_ex$x \
preprocess_ex$x \
radio_ex$x \
radio1_ex$x \
raiseCDKObject_ex$x \
scale_ex$x \
scroll_ex$x \
selection_ex$x \
slider_ex$x \
subwindow_ex$x \
swindow_ex$x \
template_ex$x \
traverse_ex$x \
viewer_ex$x \
vinstall$x

LINKIT= $(LINK) $(CFLAGS) $(CPPFLAGS) $? -o $@ $(LDFLAGS) $(LIBS)

all : $(BINS)

alphalist_ex$x :alphalist_ex.c; $(LINKIT)
bind_ex$x :bind_ex.c; $(LINKIT)
buttonbox_ex$x :buttonbox_ex.c; $(LINKIT)
calendar_ex$x :calendar_ex.c; $(LINKIT)
cdkscreen_ex$x :cdkscreen_ex.c; $(LINKIT)
dialog_ex$x :dialog_ex.c; $(LINKIT)
entry_ex$x :entry_ex.c; $(LINKIT)
fscale_ex$x :fscale_ex.c; $(LINKIT)
fselect_ex$x :fselect_ex.c; $(LINKIT)
graph_ex$x :graph_ex.c; $(LINKIT)
hello_ex$x :hello_ex.c; $(LINKIT)
histogram_ex$x :histogram_ex.c; $(LINKIT)
itemlist_ex$x :itemlist_ex.c; $(LINKIT)
label_ex$x :label_ex.c; $(LINKIT)
lowerCDKObject_ex$x :lowerCDKObject_ex.c; $(LINKIT)
marquee_ex$x :marquee_ex.c; $(LINKIT)
matrix_ex$x :matrix_ex.c; $(LINKIT)
mentry_ex$x :mentry_ex.c; $(LINKIT)
menu_ex$x :menu_ex.c; $(LINKIT)
position_ex$x :position_ex.c; $(LINKIT)
preprocess_ex$x :preprocess_ex.c; $(LINKIT)
radio_ex$x :radio_ex.c; $(LINKIT)
radio1_ex$x :radio1_ex.c; $(LINKIT)
raiseCDKObject_ex$x :raiseCDKObject_ex.c; $(LINKIT)
scale_ex$x :scale_ex.c; $(LINKIT)
scroll_ex$x :scroll_ex.c; $(LINKIT)
selection_ex$x :selection_ex.c; $(LINKIT)
slider_ex$x :slider_ex.c; $(LINKIT)
subwindow_ex$x :subwindow_ex.c; $(LINKIT)
swindow_ex$x :swindow_ex.c; $(LINKIT)
template_ex$x :template_ex.c; $(LINKIT)
traverse_ex$x :traverse_ex.c; $(LINKIT)
viewer_ex$x :viewer_ex.c; $(LINKIT)
vinstall$x :vinstall.c; $(LINKIT)
#
# Standard clean directives.
#
clean::
$(RM) -rf .libs
$(RM) core *.o $(BINS)

distclean:: clean
$(RM) Makefile

自己写的makesh:
export INSTALL="./install-sh -c"; export CC=cc;rm -f config.*;configure;make;make install;cd examples;make

 
fghao 发表于: 2002/10/02 02:18am
up
 
samhoo 发表于: 2002/10/06 09:26pm
我看了自己机器上的uname -X,除了序列号外,没什么差别。
env:
_=/bin/env
HZ=100
PATH=/usr/java2/bin:/usr/local/bin:/bin:/usr/bin:/usr/informix/bin:.
HUSHLOGIN=FALSE
INSTALL=./install-sh -c
CVS_RSH=ssh
EXINIT=set tabstop=4
LOGNAME=local
MAIL=/usr/spool/mail/local
LD_RUN_PATH=:/usr/local/lib
CC=cc
CVSROOT=:ext:@x.x.x.x#22:/datapool/usr/local/CVSHOME
SHELL=/bin/ksh
JAVA_HOME=/usr/java2
HOME=/usr/local
INFORMIXDIR=/home/informix
TERM=vt100
PWD=/usr/local/workbench/cdk-4.9.10.cc_curses
TZ=CST-8

除了TERM环境变量不同可能有影响,我实在想不出有别的环境变量可能会造成这样的情况,于是,就把TERM改成了scoansi,仍是缺少边框,而且所有的边框线都出现了乱码。

至于Makefile,差别很大,无从比较。

请问你用的是哪个版本的cdk,是4.9.10吗?如果是,会有一个cdk-4.9.10.lsm文件:
Begin3
Title:      Curses Development Kit
Version:    4.9.10
Entered-date:   21AUG2000
Description:    CDK is a widget set developed on top of the basic curses
       library. It contains 21 ready to use widgets. Some which
       are a text entry field, a scrolling list, a selection list,
       a alphalist, pull-down menu, radio list, viewer widget,
       dialog box, and many more.
Keywords:   Curses, Library, Widget Set
Author:     glover@tuzo.erin.utoronto (Mike Glover)
Maintained-by:  mike@vexus.ca (Vexus Consulting Group)
Primary-site:   http://www.vexus.ca/CDK.html
Alternate-site:
Original-site:
Platforms:  Linux, Solaris. AIX, BSD, SGI, HPUX, NT,
Copying-policy: BSD License.
En

 
 

Copyright © ChinaUnix.net  *  转载请注明出处及作者