Chinaunix首页 | 论坛 | 博客
  • 博客访问: 373140
  • 博文数量: 94
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 823
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 16:49
文章分类

全部博文(94)

文章存档

2015年(1)

2011年(1)

2010年(3)

2008年(8)

2007年(55)

2006年(26)

我的朋友

分类: C/C++

2006-05-09 21:30:17

这个问题折腾了我好长时间。

    在第二次学C的过程中,根据老师指点,使用《C语言的科学和艺术》这本书。这本书自带了一个扩展库,内容挺全的,为不同的平台准备了多个版本。书也是根据这个库写示例代码的,在前六章中不使用这个库我还是可以做练习的,但从第七章进入库和模块化开发后,如果不使用这个扩展库就较难往下进行了,因为许多练习就做不了,所以决定安装这个库。

(一)在RH9上

    事实也证明安装这个扩展库并不容易,不过这可能跟我的英文水平较差和C基础较差有关。我做练习的平台是RH9,使用SSH远程连接。我把unix-xwindows文件夹考到RH上,根据README,先执行sh cslib.shar命令,生成cslib子目录,然后进入到这个目录,执行make命令,生成gccx文件,然后把它考到~/bin目录中。当我写好一个c文件后,我用gccx去编译它,结果出现 -lX11 之类错误。用vi查看gccx的内容,是因为它在调用gcc前加了这样一个参数,这个参数是跟画图窗口准备的,但是它却不跟我的系统匹配,结果就出了这样的错误,使我不能往下进行。我不知道它为什么会不跟我的系统相匹配,因为这个系统上安装了图形界面,却提示是找不到 -lX11 ,是ld的连接错误,也许是系统或连接器的版本问题吧。

    如果我仍然使用gcc去编译的话,那就像没有安装这个库一样出错。如果把gccx中那个 -lX11 参数去掉,就不会报错了,顶多只是仍然不能使用画图的功能(会报一堆关于graphics.c文件中函数的错误),至少其它的可以编译通过(好像不同版本扩展库在前面make时生成的cslib.a相同)。

    于是我重搞了一次,安装的是standart版本,方法和前面一样,我发现和前面不同的就是gccx中缺少了-lX11 参数。还有一的地方,它编译画图程序时不再报错,只是运行生成的可执行文件没有什么反应,马上出现提示符。

(二)在turbo C++上
为了能使用画图函数,我把目标转移到了本地的Turbo C上。拿出以前的Turbo C 2.0版,然后按照README中新的安装方法,先执行CSLIB.EXE,进入生成的CSLIB子目录,把所以.h文件考到TC的include目录中,然后尝试是否可以使用扩展库。让我失望的事,连扩展库中GetInteger这样简单函数都不能使用,编译没有错误,连接时提示 _GetInteger未定义,所以扩展库还是没有安装好的。在README的后面部分提到了需要将CSLIB.LIB包含到每个perject中,并提示说HELLO.PRJ中已包含了所有正确的信息,但限于我的水平,在perject菜单中找不到可用的选项。

    随后根据师兄的指点,我又下了一个Turbo C++ 3.1版的汉化版,在这个编译器上尝试一下。这次终于实现了,开始的安装方法和刚刚上面的一样,完成后在"选项"-"编译器"-"代码生成"菜单中将"模式"改为"大型"。在使用的时候也不与平常相同,并不是直接编译单个源文件,而是需要把程序作为一个perject来处理。首先把CSLIB.LIB和HELLO.PRJ考到目标目录下,在"工程"菜单中选择"打开工程",把HELLO.PRJ载入,然后把项目中的hello.c移除,然后添加目标文件,再编译运行就没有错误了。

    还有一个需要注意的地方是,在使用扩展库画图(第7章)的时候,第一次运行时图形会正常显示,但是以后运行都会显示"Error:Internal Error:RegisterClass failed",此时只要在任务管理器中把名为"wowexec"的进程(它会空2格显示在进程列表中,并且没有标明内存使用数)结束,就可以恢复正常了。不过有个缺点,每执行一次画图程序都需要在任务管理器中手动结束这个进程。

阅读(3377) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~