• 7097阅读
  • 0回复

企业级嵌入式web开发环境的搭建--cgicc+fcgi+mysql++ [复制链接]

上一主题 下一主题
离线zrqlx126
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-24
一 前言
     最近收到朋友的请求,能不能使用纯C/C++搭建一个开发环境做cgi开发,于是就在网上到处搜索,倒是发现了不少开发环境,但是很可惜的是,几乎都是使用第三方程序加载运行的。于是思索着自行搭建一个开发环境,使用apache做服务器,mysql做数据处理,遵循着这个思路,才有了一下的搭建步骤,之前也曾在坛子里发表过一个,是2010年左右,现在把搭建步骤写出来。
二 软件
     在本实例中,使用windows xp 、apache、mysql、fcgi、mysql++、cgicc、devcpp、heidisql,需要下载一些软件,这些软件都是免费的或者开源的:
     1、mysql的图形前端heidisql,官方网站http://www.heidisql.com/download.php
     2、mysql数据库,官方网站http://www.mysql.com/downloads/mysql/
     3、apache网站服务器工具,官方网站http://httpd.apache.org/
     4、fastcgi模块,官方网站http://httpd.apache.org/mod_fcgid/
     5、fastcgi库,官方网站http://www.fastcgi.com/drupal/node/5
     6、cgicc库,官方网站http://www.gnu.org/software/cgicc/
     7、mysql驱动库,官方网站http://tangentsoft.net/mysql++/
     8、devcpp 编译器,官方网站http://sourceforge.net/projects/dev-cpp/
     我们使用devcpp工具来开发,它带有定制过的mingw编译环境,以后所有的库文件的编译和程序的开发都将依赖它。heidisql客户端是一个免费的开源工具,使用它来管理mysql数据库十分合适,apache是著名的网页服务器工具,目前一大半的网站都是用它,fastcgi是一套常驻内存模型库,众所周知的cgi性能不佳,而fastcgi就是一个比较好的解决思路,cgicc是一套C++开发cgi的库,也是免费开源的,我们使用它来构建程序,mysql++是一套成熟稳定的mysql C++驱动库,比起官方的驱动要稳定的多。整个例子使用的软件均是可以免费下载使用的,适合预算不是很多的企业用户。
三 FCGI
    我们在fcgi网站下载下来的都是源代码,没有编译好的二进制库,我们需要使用devcpp对源代码进行编译,方便使用。目前的版本是2.4.0。如图,下载完成以后解压到系统C盘,安装完成devcpp开始编译。

开始编译之前,我们需要做一些预处理工作,新建一个before.cmd文件,写入一下命令:
  1. copy /y include\fcgi_config_x86.h include\fcgi_config.h
  2. mkdir dev-cpp
  3. mkdir dev-cpp\include
  4. mkdir dev-cpp\obj
  5. mkdir dev-cpp\lib
  6. copy /y include\fastcgi.h dev-cpp\include\fastcgi.h
  7. copy /y include\fcgi_config.h dev-cpp\include\fcgi_config.h
  8. copy /y include\fcgi_stdio.h dev-cpp\include\fcgi_stdio.h
  9. copy /y include\fcgiapp.h dev-cpp\include\fcgiapp.h
  10. copy /y include\fcgimisc.h dev-cpp\include\fcgimisc.h
  11. copy /y include\fcgio.h dev-cpp\include\fcgio.h
  12. copy /y include\fcgios.h dev-cpp\include\fcgios.h

解释一下,首先需要将include中的fcgi_config_x86.h文件进行重新命名为fcgi_config.h,然后在当前目录新建dev-cpp文件夹以及 include、obj、lib三个子文件夹,将所有头文件拷贝到dev-cpp\include中备用,完成后运行该批处理。
然后新建一个空白devcpp工程fcgi,添加文件如图:

设置工程属性如下图:





在连接器中加入-l ws2_32命令,目录中包含C:\fcgi-2.4.0\include,构建选项中设置两个目录obj和lib。然后开始构建,会出现错误,不要紧张,将生成的makefile.win文件改名为Makefile.devcpp,编辑一下,将几个C语言文件使用$(CC)命令编译即可,如图:

然后在工程属性中设置makefile文件为Makefile.devcpp,清理后再次编译即可通过。

这样一来会在C:\fcgi-2.4.0\dev-cpp\lib中生成libfcgi.a和fcgi.dll文件,这两个文件就是我们编译出来的库。
四 CGICC
     cgicc网站下载下来的文档仍然是源代码,需要我们进行编译,目前的版本是3.2.9,解压到C盘,如图:


开始编译之前,我们需要做一些预处理工作,新建一个before.cmd文件,写入一下命令:
  1. copy /y cgicc\CgiDefs.h.in cgicc\CgiDefs.h
  2. mkdir dev-cpp
  3. mkdir dev-cpp\include
  4. mkdir dev-cpp\include\cgicc
  5. mkdir dev-cpp\obj
  6. mkdir dev-cpp\lib
  7. copy /y cgicc\*.h dev-cpp\include\cgicc
  8. copy /y contrib\FCgiIO.h dev-cpp\include\

然后新建一个空白的devcpp工程cgicc,包含cgicc目录中所有的文件,包括头文件和cpp文件,由于我们要使用fcgi进行开发,所以我们还需要将contrib目录中的FCgiIO.cpp和FCgiIO.h也包含进来,设置工程属性如图:




在编译器中加入-DCGICC_EXPORTS命令,连接器中加入-l fcgi命令,库目录包含C:\fcgi-2.4.0\dev-cpp\lib,这个文件是我们刚刚编译成功的fcgi库,头文件目录包含C:\cgicc-3.2.9、C:\cgicc-3.2.9\contrib、C:\fcgi-2.4.0\include三个,构建选项添加lib和obj两个目录,然后编译,成功后会在C:\cgicc-3.2.9\dev-cpp\lib生成libcgicc.a和cgicc.dll。
五 MYSQL++
     这个网站下载下来的也是源代码,但是提供了make文件,这个非常好,但是需要进行一定的修改,最新版本是3.1.0,首先将mysql中的include和lib解压出来放在C:\mysql-5.5.21-win32中,这里我们使用的mysql版本为5.5.21如图:

然后把打开命令行,进入mysql++解压后的目录中C:\cgicc-3.2.9,由于我们把devcpp安装在C:\Dev-Cpp中如图:

运行一下命令:
  1. set PATH=%path%;C:\Dev-Cpp\bin\
  2. dlltool -k -d libmysqlclient.def -l C:\mysql-5.5.21-win32\lib\libmysqlclient.a
  3. copy libmysqlclient.def C:\mysql-5.5.21-win32\lib\

如图:

然后我们使用编辑器打开Makefile.mingw,添加两个变量
  1. include="C:\mysql-5.5.21-win32\include"
  2. lib="C:\mysql-5.5.21-win32\lib"

然后把文件中所有的
"C:\Program Files\MySQL\MySQL Server 5.1\include"替换为$(include)
"C:\Program Files\MySQL\MySQL Server 5.1\lib\opt"替换为$(lib)
另存为makefile.devcpp,开始编译,输入命令:
make -f makefile.devcpp
编译的时候可能会出现错误
修改
  1. $(CXX) -o $@ $(SSQLSXLAT_OBJECTS)  -mthreads $(__DEBUGINFO) -L. -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc -L$(lib) $(LDFLAGS)  -lmysqlclient -lmysqlpp -lmysqlpp_ssqls2parse


  1. $(CXX) -o $@ $(SSQLSXLAT_OBJECTS) -lmysqlpp_ssqls2parse -Wl,--as-needed -L. -L$(lib) -lmysqlclient -lmysqlpp

修改
  1. $(CXX) -o $@ $(TEST_SSQLS2_OBJECTS)  -mthreads $(__DEBUGINFO) -L. -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc -L$(lib) $(LDFLAGS)  -lmysqlclient -lmysqlpp -lmysqlpp_ssqls2parse


  1. $(CXX) -o $@ $(TEST_SSQLS2_OBJECTS) -lmysqlpp_ssqls2parse -Wl,--as-needed -L. -L$(lib) -lmysqlclient -lmysqlpp

然后再次make就会成功,成功后会生成libmysqlpp.a和mysqlpp.dll。

六 安装部署     新建D:\webdesign、D:\webdesign\bin、D:\webdesign\fcgi-bin、D:\webdesign\include、D:\webdesign\lib、D:\webdesign\mysqldata、D:\webdesign\software文件夹,然后在include和lib文件夹下新建cgicc-3.2.9、fcgi-2.4.0、mysql-5.5.21-win32、MySQL++四个子文件夹,将刚刚编译好的库文件和自带的头文件拷贝入相应的文件夹中,在bin文件夹中新建连个批处理install.bat和uninstall.bat,分别写入一下命令:
  1. echo -- 安装Apache2服务
  2. ..\Apache2.2\bin\httpd.exe -k install -n Apache2.2
  3. net start Apache2.2
  4. start ..\Apache2.2\bin\ApacheMonitor.exe
  5. echo -- 安装MySQL服务
  6. ..\mysql-5.5.21-win32\bin\mysqld --install MySQL --defaults-file="D:/webdesign/mysql-5.5.21-win32/my.ini"
  7. net start MySQL
  1. echo -- 杀死浏览器管理器进程
  2. taskkill /f /im iexplore.exe
  3. echo -- 杀死 apache 管理进程
  4. taskkill /f /im ApacheMonitor.exe
  5. echo -- 卸载mysql服务
  6. net stop MySQL
  7. ..\mysql-5.5.21-win32\bin\mysqld --remove
  8. echo -- 卸载apache2服务
  9. net stop apache2.2
  10. ..\Apache2.2\bin\httpd.exe -k uninstall -n Apache2.2

然后将apache、mysql以及HeidiSQL安装到D:\webdesign中,然后把下载的软件做一个备份拷贝到D:\webdesign\software中备用。如图:
我们以后的工作目录就将设在这里,完成后,开始配置
首先备份D:\webdesign\Apache2.2\conf\httpd.conf为httpd.conf.back,将解压后的mod_fcgid-2.3.6目录中modules下的mod_fcgid.so拷贝至D:\webdesign\Apache2.2\modules下,为apache增加fcgi模块,然后打开配置文件修改,在文档最后添加:
  1. LoadModule fcgid_module modules/mod_fcgid.so
  2. LoadModule rewrite_module modules/mod_rewrite.so
  3. AddHandler fcgid-script .fcgi
  4. AddHandler cgi-script .cgi
  5. Alias /fcgi "D:/webdesign/fcgi-bin/"
  6. RewriteEngine on
  7. RewriteRule   ^/$  /fcgi  [R]
  8. <Directory "D:/webdesign/fcgi-bin">  
  9.     DirectoryIndex index.html index.fcgi index.cgi
  10.     Options Indexes FollowSymLinks ExecCGI
  11.     Order allow,deny
  12.     AllowOverride None  
  13.     Allow from all
  14. </Directory>

再来配置mysql,拷贝D:\webdesign\mysql-5.5.21-win32\my-small.ini为my.ini,打开修改,在[mysqld]栏目最后添加
  1. # 设置安装位置
  2. basedir=D:/webdesign/mysql-5.5.21-win32
  3. # 设置数据库位置
  4. datadir=D:/webdesign/mysqldata
  5. #设置连接编码
  6. character-set-server=utf8

然后将data目录中的所有文件拷贝至D:\webdesign\mysqldata,部署完成了,进行测试。双击D:\webdesign\bin下的install.bat统一开启服务,如图:

至此,环境已经全部搭建完成,随便编译几个自带的例子文件,拷贝入fcgi-bin中,运行浏览器测试,完成后双击uninstall.bat暂停所有服务

附件中包含编译完成的库文件盒头文件 webdesign.rar (4444 K) 下载次数:4
快速回复
限100 字节
 
上一个 下一个