windows下简单编译PostgreSQL源代码

pg作为一个开源库还是很不错的,但是在windows下完全编译pg是一项很困难的工作,设计到的东西很多。搞了两天,发现还是有一种简单的方式,就是不采用完全编译,我们仅仅生成sln项目。这样的话,可以只需要安装了perl就可以了,不需要安装其他的工作。这个也是参考了其他网友的工作。本人经过尝试PG源代码中9.0.0可以采用这种方式,更高的版本中存在一个问题,在调用pl的过程中部分函数有问题,主要是获取编译器版本的时候。不过9.0的版本,简单的学习已经基本够用了。

原文链接:http://blog.csdn.net/youngtiger86/article/details/6882457

原文如下:

postgresql 是一款优秀的开源数据库。基于工作需要和个人兴趣,在空余时间稍稍学习下其代码。第一件事就是在 windows 下搭建其 VC 工程啦,这样就可以借助功能强大的 sourceinsight 和 VC 浏览和调试代码啦。

1. 安装辅助软件 perl。因为 postgresql 的源码包中并不自带 vc 工程,但提供生成工程的相关脚本,可借助 perl 生成。在网上找到 perl 下载安装(http://www.perl.org/get.html),安装好后可在命令行下输入命令: perl -version 看是否安装成功,我执行的结果如下(如果提示找不到命令,可能是环境变量没有设置,找到 perl 中的 bin 目录,将其路径加入到环境变量的 path 里面就可以了):


1. 从官网上下载需要的版本的源码(如 9.0.3):http://www.postgresql.org/ftp/source/

2. 解压代码压缩包到本地某目录,解压后目录结构如下图:


3. 修改配置文件,准备生成 VC 的工程文件。进入目录 \src\tools\msvc 下,找到 config_default.pl(稍早版本应该是 config.pl),打开该文件,其内容大致如下。由于我们只安装了 perl,而且这已经足够生成 VC 工程了,所以我就把其他的都注释掉了,如果实际需要其它项的话,可以安装相应软件,并且在下面的文件中将其注释去掉。

# Configuration arguments for vcbuild.
use strict;
use warnings;


our $config = {
asserts=>0, # --enable-cassert
# integer_datetimes=>1, # --enable-integer-datetimes - on is now default
# float4byval=>1, # --disable-float4-byval, on by default
# float8byval=>0, # --disable-float8-byval, off by default
# blocksize => 8, # --with-blocksize, 8kB by default
# wal_blocksize => 8, # --with-wal-blocksize, 8kb by default
# wal_segsize => 16, # --with-wal-segsize, 16MB by default
#ldap=>1, # --with-ldap
#nls=>undef, # --enable-nls=
#tcl=>undef, # --with-tls=
perl=>'C:\tools\Perl', # --with-perl,我只保留了这一个,因为我只需要这一个,呵呵
#python=>undef, # --with-python=
#krb5=>undef, # --with-krb5=
#openssl=>undef, # --with-ssl=
#uuid=>undef, # --with-ossp-uuid
#xml=>undef, # --with-libxml=
#xslt=>undef, # --with-libxslt=
#iconv=>undef, # (not in configure, path to iconv)
#zlib=>undef # --with-zlib=
};


1;

以上各项的具体含义,一会儿给一个链接,有兴趣的朋友可以看看,写得比较详细,我就不赘述了。

4. 好了,让我们现在命令行里试一把。先切换到 \src\tools\msvc 目录,然后用 perl 处理 build.pl,如下图:


会提示Solution.pm 中的一个错误

5. 打开 Solution.pm,转到 69 行,看看到底是啥问题?69行开始的内容如下:

# Determine version of vcbuild command, to set proper verison of visual studio
open(P,"vcbuild /? |") || die "vcbuild command not found";
my $line =

;
close(P);
if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
{
die "Unable to determine vcbuild version from first line of output!";
}
if ($1 == 8) { $self->{vcver} = '8.00' }
elsif ($1 == 9) { $self->{vcver} = '9.00' }
else { die "Unsupported version of Visual Studio: $1" }
print "Detected Visual Studio version $self->{vcver}\n";

不难看出,这里是要确定 vc 编译器的版本,可是, vcbuild 命令系统不认识。。。在命令行里试了一把,果然不认识。这里有一个比较简单地解决办法,就是根据自己的编译器类型,我们直接把上面的编译器类型给指定了,呵呵,更好地办法大家可以上网搜罗下。也就是说,改成下面这样(我装的是 VS2010,这里没有给出对应的版本号,所以我就给 9.00 啦,也就是对应 VS2008,等生成好了,用 VS2010 打开升级下就可以了):

# Determine version of vcbuild command, to set proper verison of visual studio
#open(P,"vcbuild /? |") || die "vcbuild command not found";
#my $line =

;
#close(P);
#if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/)
#{
# die "Unable to determine vcbuild version from first line of output!";
#}
#if ($1 == 8) { $self->{vcver} = '8.00' }
#elsif ($1 == 9) { $self->{vcver} = '9.00' }
#else { die "Unsupported version of Visual Studio: $1" }
#print "Detected Visual Studio version $self->{vcver}\n";
$self->{vcver}='9.00‘; #注意这个后面有个分号哦,我刚刚就搞掉了,哇哈哈

6. 好了,在来生成一下:

hoho~~~开始干活啦~~~兴奋ing~~~~

最后一行可能会报一个 msbuild 命令不认识,先不管它。

7. 好了,咱们来看看都变出了些神马东西。切换到代码的最上层目录下,


哇,好多工程文件啊!看来咱们成功了,欢呼~~~

好了,找找,有个 .sln 的解决方案文件的,名字叫做 pgsql.sln,找到之后,猛击啊!

我装的是 VS2010,生成的是 VS2008 的工程,打开的时候会提示装换,果断转。如果您安装的是稍早的版本,在上面的 5 中,可以设置对应的版本号哦!

8. 装换中¥!%@!¥%¥#…………&*……

9. 转换成功!


编译一把试试,变那个黑黑的 postgres 工程就可以啦!编译成功啦,环境也就搭建好啦!

好了,工程搭建就说到这里了,使用的问题后面再说吧!写得不好的或者看不懂的地方,欢迎大家拍砖啊!希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值