Archive

Posts Tagged ‘cygwin’

cygwin下载安装gcc

September 15th, 2008 will No comments

为在VxWorks上开发gui,用到了minigui,为了编译minigui需要一个linux的编译环境,想到cygwin。曾经在在windows下建立Ethereal开发环境的时候使用过cygwin,但是当时编译用的VC6.0的编译器,所以没有安装gcc

在cygwin下安装gcc只是选择库的不同,其它操作没有变化,可参考在windows下建立Ethereal开发环境,安装gcc需要

  • binutils
  • gcc
  • gcc-mingw
    选择这些库的同时可能有其它的库也被选中了,这个不用管了。安装完成后可以在bash中输入命令gcc –version查看gcc的版本信息。cygwin提供的为3.4.4版本。
  • PS:本来想写的是在cygwin下配置minigui的编译环境,但是几次尝试都失败了,没有时间论证是否可行了,改成vmware安装ubuntu编译了。

    Categories: 学习笔记 Tags: ,

    在windows下建立Ethereal开发环境

    May 21st, 2008 will No comments

    Ethereal是一个开源项目,Ethereal的功能是对网络传输的数据进行抓包,可以运行在UNIX、Linux、Windows操作系统上。由于它的开源和多平台支持,使其成为学习网络知识的最好工具。

    如果只是使用Ethereal来抓包,可以下载Ethereal的Binary发行版,需要再次开发可以下载Source code发行版,本文中所使用的源码包为ethereal-0.99.0.tar.gz。下面为在windows下建立Ethereal编译开发环境的过程。此过程根据Ethereal Developer’s Guide 18189 for Ethereal 0.10.14文档操作得来,采用Ethereal推荐的Cygwin+MSVC6方式。

    1、安装Cygwin
    http://www.cygwin.com/下载cygwin安装更新包(一个setup.exe),选择download without installing模式,接下来的设置指定cygwin的安装目录和cygwin更新或安装文件的下载保存目录,指定下载服务器,下载完成后出现下面画面,在默认选择安装的基础上添加下列安装包选择

    Archive/unzip Devel/bison Devel/flex Interpreters/perl
    Interpreters/python Utils/patch Web/wget  

    cygwin_setup_select_packages 
    下载完成之后需要安装这些软件包,再次运行setup.exe,选择Install form Local Directory,此时只需要将All 后面设置为Install,即可安装。
    安装中遇到的问题,选择Install form internet模式,在上图中点下一步会出现下载失败;在本地没有安装包的时候,选择Install form Local Directory模式,会出错。cygwin安装成功后查看bash版本如下
    cygwin_setup_succeed

    二、安装MSVC6.0
    其实我机器早就安装了MSVC6.0,MSVC6.0提供编译器和链接器。安装过程可以勾选注册环境变量,由于我安装比较早,当时没有选择注册环境变量,按照开发文档中所说的安装VC98\Bin中的vcvars32.bat,但是似乎并没有起作用,还是手动设置。“我的电脑->属性->高级->环境变量”编辑Path变量值,将vcvars32.bat的变量值加入path的变量值中,用分号(;)隔开。我的VC安装在D盘添加的环境变量如下:
    D:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;
    D:\Program Files\Microsoft Visual Studio\VC98\Bin;
    D:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;
    D:\Program Files\Microsoft Visual Studio\Common\Tools;
    默认情况下环境变量中没有Include变量,需要新建Include变量然后添加如下变量值
    D:\Program Files\Microsoft Visual Studio\VC98\ATL\Include;
    D:\Program Files\Microsoft Visual Studio\VC98\Include;
    D:\Program Files\Microsoft Visual Studio\VC98\MFC\Include;
    默认情况下环境变量中没有Lib变量,需要新建Lib变量添加如下变量值
    D:\Program Files\Microsoft Visual Studio\VC98\Lib;
    D:\Program Files\Microsoft Visual Studio\VC98\MFC\Lib;
    添加cygwin的bin目录到环境变量path中,为了nmake时运行bash。

    三、检测已安装工具的有效性
    在windows的cmd下,先进入Ethereal源码所在文件夹,然后运行
    nmake -f Makefile.nmake verify_tools
    验证通过如图verify_installed_tools_success 如果验证失败,提示有什么软件没有安装,通过cygwin的setup.exe重新安装相应软件。

    四、安装库文件
    简单的方法是通过nmake -f Makefile.nmake setup,通过wget自动下载所需的库文件,保存目录在config.nmake中的ETHEREAL_LIBS指定,可以自行修改。我将其修改为ETHEREAL_LIBS=D:\ethereal-win32-libs。由于我使用校园网的关系,下载必然是要失败的,所以只能手动安装这些库文件了。
    安装目录以D:\ethereal-win32-libs为当前目录,虽然说明文档中表明有些库是可选的,但我不安装可选库,编译不通过。
    下表是根据主makefile.nmake中setup来建立。

    库名称 版本号 包格式 安装目录 备注
    GLib 2.6.6 Binary&Dev glib 下载
    GTK+ 1.3.0 Binary&Dev gtk+ 下载
    libiconv 1.9.1 Binary&Dev libiconv-1.9.1.bin.woe32 下载
    gettext 0.13 Binary gettext-runtime-0.13.1 下载
    Net snmp 5.2.5pre2 Source net-snmp-5.2.5 下载 说明
    wpdpack 3.1 Developer’s Packs WpdPack 下载
    adns 1.0-05 Binary&Source adns-1.0-win32-05 下载
    pcre 6.4 Binary&Developer pcre-6.4 下载
    zlib 1.2.3 Binary&Dev zlib123-dll 下载
    lua 5.1.3 win32bin&win32lib lua5.1 下载 说明

    Net SNMP库使用说明:找到net-snmp-5.2.5.pre2\win32\libsnmp\文件夹中的libsnmp.dsp工程文件,用VC6.0编译生成release版本。默认情况下生成的netsnmp.lib文件在net-snmp-5.2.5.pre2\win32\lib\release\文件夹下。
    将net-snmp-5.2.5.pre2文件夹下的include和win32文件夹拷到D:\ethereal-win32-libs\net-snmp-5.2.5文件夹下。
    修改config.nmake中的NET_SNMP_DIR宏,修改如下
    NET_SNMP_DIR=$(ETHEREAL_LIBS)\net-snmp-5.2.5

    lua库的使用说明:lua5_1_3_Win32_vc6_lib.zip解压后的lua5.1.lib拷到D:\ethereal-win32-libs\lua5.1\lib目录下,将include文件夹拷到D:\ethereal-win32-libs\lua5.1\目录下;将lua5_1_3_Win32_bin.zip解压到D:\ethereal-win32-libs\lua5.1\bin目录下。修改config.nmake中的LUA_LIBS宏,修改如下:
    LUA_LIBS=$(LUA_DIR)\lib\lua5.1.lib

    五、编译ethereal
    以上搞定之后就可以编译了,cmd下输入nmake -f makefile.nmake all
    遇到了找不到unistd.h头文件的错误,解决办法自己新建一个unistd.h头文件,内容如下:

    /** This file is part of the Mingw32 package.
    * unistd.h maps     (roughly) to io.h
    */

    #ifndef _UNISTD_H
    #define _UNISTD_H

    #include <io.h>
    #include <process.h>

    #endif /* _UNISTD_H */

    将其放到include的环境变量值所指的目录下,如D:\Program Files\Microsoft Visual Studio\VC98\Include;
    编译成功之后会在源码文件夹中生成ethereal.exe文件,现在运行ethereal.exe会提示缺少wiretap-0.3.dll、intl.dll等动态链接库。解决办法是在cmd下运行nmake -f makefile.nmake install-deps。将所需的dll拷到源码文件的根目录下。
    ethereal_ui

    界面还是比较粗糙的,下次把gtk2加入,看下能有改善否。
    差点忘了,在nmake -f makefile.nmake distclean的时候有个cd asn1的错误,这应该是ethereal的一个bug,路径错误。解决办法,修改makefile.nmake中的cd asn1修改为cd plugins/asn1,下面隔一行添加cd .. 。

    此文基本是按照我安装过程记录下来,若有问题请联系我。