本文主要是对postgreSQL数据库在windows下进行编译,使用vs2005进行编译。
1.环境
windows764位,旗舰版,postgreSQL8.4.10,其他版本没有试过,按照下序步骤应该也是可以的。
2.需要的软件
需要的软件比较多,也比较复杂,按照官方文档上下载就可以。http://www.postgresql.org/docs/8.4/interactive/install-win32-full.html官方网站中的“Requirements“。 对于这些所需要的软件中,需要说明的是tcl,perl,python,这些开始下载的是x64位的,结果不行。然后都统一使用的是x86版本,最好统 一,要么是64位要么是x86。不然会提示许多函数找不到,即类库中函数不一致问题。还有一个软件iconv官方文档上没有说明,但是还是需要的。需要下 一个windows版本,我使用的是libiconv-1.9.1.bin.woe32。(这个文件我找了很久才弄好)。其他软件按照要求来即可,还有ActiveState TCL,官方文档上指定说明需要8.4,我也按照要求来了。(Required for building PL/TCL (Note: version 8.4 is required, the freeStandard Distribution is sufficient).
3配置文件
config.pl文件中需要软件的一些参数:
tcl=>'c:\tcl', #--with-tls=<path>
perl=>'c:\perl', # --with-perl
python=>'C:\Python27', #--with-python=<path>
krb5=>'C:\MIT\Kerberos', #--with-krb5=<path>
ldap=>1, # --with-ldap
openssl=>'C:\OpenSSL-Win32', #--with-ssl=<path>
uuid=>'F:\postgre_depend\uuid-1.6.2\pgsql',#--with-ossp-uuid
xml=>'F:\postgre_depend\libxml2-2.7.8.win32',
xslt=>'F:\postgre_depend\libxslt-1.1.26.win32',
iconv=>'F:\postgre_depend\libiconv-1.9.1.bin.woe32',
zlib=>'F:\postgre_depend\zlib125-dll'#--with-zlib=<path>
按照其他帖子分析,新建了一个新的pl文件,buildenv.pl。
内容如下:
$ENV{PATH}=$ENV{PATH}.';C:\GnuWin32\bin;C:\GnuWin32;C:\GnuWin32\include;F:\postgre_depend\bin';
gnuwin32主要是一些工具,如bison,diff,flex等的安装目录,配置可以参照http://www.php100.com/html/itnews/PHPxinwen/2009/0929/3357.html。但会发现有些是在config.pl中出现的,可能是postgreSQL的版本不一样。
4 编译
使用vs2005的命令提示窗口,这个作用主要是配置vs2005版本的一些环境变量。删除contrib中的uuid-XXXX和fuzzystrmatch两个文件夹,然后进入到到postgreSQL源码的目录postgresql-8.4.10\src\tools\msvc,运行perl build.pl或者perl build.pl DEBUG,两者的区别在于一个是release版本一个是debug版本。在运行时发现还出现vs版本不匹配或者找不到现象,主要是因为我使用的vs是 中文版,会提示哪个文件错误了,并且会打印出错误代码,只要在那个文件中找到出错行,该文件是perl脚本,只要把那个判断语句中的变量打印出来,然后条 件写成与该变量一样就可以,(不好意思,忘记是哪个文件了)。如果是英文版本,应该不会有该问题。
5 问题
问题1,如果perl、tcl和python版本不一样,可能出现plperl.vcproj、plpython.vcproj问题,也即这些依赖的函数都找不到。
问题2,vs版本问题,英文版本或中文版问题。如果是英文版本,记得使用vs的命令窗口进入。如果是中文版本,还记得需要更改perl脚本中的一个条件表达式。
其他问题,如果还有什么文件找不到之类的,看看是不是该软件的版本问题。
6 继续
编译完之后,sln文件会生成个好,如果想使用vs2005工具编译,则打开项目即可。
还可以参照http://www.cnblogs.com/tjdx415/archive/2010/01/19/1651414.html里面讲述的