《C语言的科学和艺术》自定义库cslib在Win7和Linux下的编程环境配置
《C语言的科学和艺术》是一本优秀的经典教材,著译皆佳。 无奈本书成于1994年,其与本书配套的库文件安装成了问题,在学习的过程中如果手痒想试一下自定义库的使用,许多人按照帮助文件是无法实现的。尤其是在Windows系统下,帮助文件显示使用的是Borland C 4.0 和Turbo C 2.0 ,在Win7系统下更是连安装都成问题。更不用提在64位Windows 7操作系统了。 现有的网上资料大多语焉不详, 且错漏较多。 虽然本人是个不折不扣的菜鸟,且是业余的,在数天摸索下,终于编译成功,现在奉上详细图文步骤,以献给有需要的人。 有不当之处,欢迎指出。
一、 Win7环境下的配置
0 准备。VC6.0安装文件、本书配套源代码(可从http://bbs.bccn.net/thread-182804-1-1.html下载);操作系统为Win7 34位。
1 安装VC++6.0, 本人安装的是VC6.0绿色版。在Win7下运行时会提示存在兼容性问题,不用管它,直接勾选“不再显示此消息”,运行程序即可。
2 复制所有standard文件夹下的.h文件到vc安装目录下的include文件夹内,譬如我的目录是“C:\Program Files\Microsoft Visual Studio\VC98\Include”。
3 将standard文件夹下的这些源文件编译成.lib静态库文件。具体步骤为:
3.1 点击VC的“文件”→“新建”,打开“新建”对话框,选择“Win32 Static Library”,工程名称为cslib,点击“确定”按钮。如下图:
3.2 不用勾选,点击“完成”。
3.3 点击“确定”。
3.4 在VC中点击“FileView”,展开“cslib files”。
3.5 在“Source Files”上点右键, 选择“添加文件到目录”。
3.6 选择standard文件夹下的所有.c文件,点确定。
3.7 同理,在“Header Files”上点右键,将standard下的所有.h文件添加进去。
3.8 点击“组建”→“组建【cslib.lib】”,就完成了组建静态库的工作了。
4 找到编译组建生成的lib静态库,我的是在“D:\VC6.0green\MyProjects\cslib\Debug”目录下。
5. 将cslib.lib重命名为cslibcs.lib,拷贝到VC的lib文件夹下。为什么要重命名呢?因为include文件夹中已经有一个CSLIB.LIB文件了。我的lib路径为“C:\Program Files\Microsoft Visual Studio\VC98\Lib”。
6. 至此我们就完成了大半工作,下面我们可以试验一下库是否可以正常使用。
6.1 新建一个源文件:test.c。
6.2 用VC打开,点击“运行”,会提示新建一个工程,确认后会进行编译,连接,会提示错误:
test.obj : error LNK2001: unresolved external symbol _GetReal Debug/test.exe : fatal error LNK1120: 1 unresolved externals
6.3 在工程设置中添加库即可:
6.4 我们试试第七章的图形库是否能成功运行,同前一步一样,新建house.c,用VC打开,点击“运行”,会提示新建一个工程,确认后会进行编译,连接,会提示错误,此后单击“工程”→“设置”菜单项,选择“连接”选项卡,在“对象/库模块”的最后添加“ cslib.lib”,点击“确定”即可。
6.5 重新编译、连接,这次没有错误,但运行后并没有出现我们预期的房子图形。检查一下,可以在项目的目录下发现一个graphics.ps文件,这其实是一种PostScript格式。
① 新建一个源文件:test.c,其中include路径做理性:
#include <stdio.h> #include "..\src\standard\genlib.h" #include "..\src\standard\graphics.h" main() { InitGraphics (); MovePen (1.5, 1.0); DrawArc (0.5, 0, 360); }
② 用VC打开,点击“运行”,会提示新建一个工程,确认后会进行编译,连接,会提示错误:
③ 将需要的文“添加文件到工程”即可。
我是用虚拟机安装的乌班图系统15.10版,安装试验成功。
详细步骤如下,以下参考扩充自http://blog.sina.cn/dpool/blog/s/blog_149e725390102vtn4.html?vt=4
1. standard文件夹下的standard.shar下载到HOME文件夹,
2. 按Ctrl+Alt+T打开TERMINAL,默认当前为HOME目录,输入命令显示所有文件:
ls
3. 其中有个叫standard.shar的压缩文件,用以下命令解压:
sh standard.shar
4. 在当前目录生成cslib文件夹,其中包含了库里的各种头文件.h和实现文件.c,输入以下命令跳转到cslib目录:
cd cslib
5. 接着编译库的源文件,输入:
make
生成gccx文件和cslib.a以及其他一些.o目标文件。
6. 用超级用户操作把gccx复制到/bin/gccx (该文件夹同时被生成):
sudo cp gccx /bin/gccx
7. 回到HOME文件夹输入:
cd
到这一步,库已经安装好了,要注意,使用库时,编译需要用gccx命令,而不是gcc命令。
------------------------------------------------------------------
8. 以下是如何编辑和编译并运行第一个简单C语言程序
首先是编辑,用nano编辑器写一个hello.c的C语言程序,在TERMINAL输入:
nano hello.c
按图输入以下C程序
打完后按CTRL+ X退出,按Y保存,并按Enter键确认文件名,退出nano回到TERMINAL。
9. 用以下命令来编译c源文件,生成hello文件。
gccx hello.c -o hello
注意:如果出现以下错误:
/bin/csh: bad interpreter: No such file or directory
那是因为缺了C-SHELL
可以输入以下命令安装:
sudo apt-get install csh
10. 成功生成hello输出文件后,打以下指令运行它:
./hello
11. 同样,用图形库时也是在当前目录生成graphics.ps文件, 可以用GV查看,输入以下命令安装:
sudo apt-get install gv
按SUPER键(指Win键或苹果电脑的Command键)打开Dash面板,搜索gv打开gv程序,找到graphics.ps文件打开。也可以在其上点击右键,选择“打开方式”,以“Print Preview”方式打开。
效果如下图:
至此,基本问题解决。
PS:用新版的Dev编辑器是不能成功编译lib库的,毕竟这种94年编写的库许多语法特性与现在的gcc大相径庭。比如,库中的genlib自己实现了bool类型,而现在bool已经是一种内置类型,有冲突了。如果心有余力,可以改写一下库的实现,以使之可以在最新编译器上使用。