全部博文(14)
2011年(14)
分类: Mysql/postgreSQL
2011-03-30 12:39:13
本文系转载他人文章
我成功搭建了Postgres在Windows上的编译调试环境,和大家分享一下
首先、需要准备 Postgres的源代码,Postgres是一个开源数据库,源代码可以在其官方网站上下载,Postgres官网为:,最好不要下载最新的源代码,下载稳定一点的,我下载的是8.4.1。下载的源代码文件放在d:\code\postgres下,其后缀一般为.tar.bz2或者.tar.gz,都可以用WinRAR解压,解压到当前目录,即可得到d:\ code\postgres\postgresql-8.4.1的目录结构,至此源代码准备完毕。
第二步、准备一个编译环境,我准备的是Vs2005,下载一个Vs2005,并且顺序安装,如果你想编译64位的Postgres版本,你需要选择上Vs2005的64位组件,默认是不选择的,在32位上编译调试64位程序比较麻烦,如果你想调试64位Postgres,最好安装一个64位的操作系统。Vs2005准备好以后,发现Postgres的源代码中根本就没有Vs2005解决方案或者工程文件,如果手动一个个配置,两千多个文件下来,估计你一两个月的生命就被浪费了。所以,还是让配置自动化的好,Postgres已经考虑了这个问题,第三步在详细说明。Vs2005安装好以后,还需要把MSbuild.exe文件所在的目录加入到Path中,它一般都在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下。
第三步、配置Postgres的调试环境,进入Postgres的源代码目录:D:\code\postgres\postgresql-8.4.1,再进入src\tools\msvc下,可以看见一个名为config.pl的文件,这是一个文本文件,可以用UltraEdit打开,内容如下:
# 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
nls=>undef, # --enable-nls=
tcl=>'c:\tcl', # --with-tls=
perl=>'c:\perl', # --with-perl
python=>'c:\python24', # --with-python=
krb5=>'c:\prog\pgsql\depend\krb5', # --with-krb5=
ldap=>1, # --with-ldap
openssl=>'c:\openssl', # --with-ssl=
#uuid=>'c:\prog\pgsql\depend\ossp-uuid', #--with-ossp-uuid
xml=>'c:\prog\pgsql\depend\libxml2',
xslt=>'c:\prog\pgsql\depend\libxslt',
iconv=>'c:\prog\pgsql\depend\iconv',
zlib=>'c:\prog\pgsql\depend\zlib'# --with-zlib=
};
对其中的部分内容做一个简要的介绍:
Ø Tcl:事实上是ActiveTcl是官方发布的免费Tcl开发环境,包含许多有用的扩展包。它是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。
Ø Perl:是一种脚本语言,在字符串匹配等方面有很突出的优点。
Ø Python:一个物件导向的Script程序语言,与Java一样使用具有跨平台移植特性,语法清晰,易学易用,可与其他语言混合使用,有不少专业的人士预测Python是继Java之后的明日之星。
Ø Krb5:是(kerberos)kfw-3-2-2,是由MIT开发的提供网络认证服务的系统。它可用来为网络上的各种server提供认证服务,使得口令不再是以明文方式在网络上传输,并且联接之间通讯是加密的;它和PKI认证的原理不一样,PKI使用公钥体制(不对称密码体制),kerberos基于私钥体制(对称密码体制)。
Ø OpenSSL:SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。众多的密码算法、公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的想法。果真如此,Eric A. Young和Tim J. Hudson,他们自1995年开始编写后来具有巨大影响的OpenSSL软件包,更令我们高兴的是,这是一个没有太多限制的开放源代码的软件包,这使得我们可以利用这个软件包做很多事情。Eric A. Young 和Tim J. Hudson是加拿大人,后来由于写OpenSSL功成名就之后就到大公司里赚大钱去了。1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL的0.9.1版,到目前为止,OpenSSL的算法已经非常完善,对SSL2.0、SSL3.0以及TLS1.0都支持。 OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。不过,对于目前新成长起来的C++程序员,可能对于C语言的代码不是很习惯,但习惯C语言总比使用C++重新写一个跟OpenSSL相同功能的软件包轻松不少。OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
Ø Uuid:UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。
UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。
是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单的生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显。根据使用的特定机制,UUID不仅需要保证是彼此不相同的,或者最少也是与公元3400年之前其他任何生成的通用惟一标识符有非常大的区别。
通用惟一标识符还可以用来指向大多数的可能的物体。微软和其他一些软件公司都倾向使用全球惟一标识符(GUID),这也是通用惟一标识符的一种类型,可用来指向组建对象模块对象和其他的软件组件。第一个通用惟一标识符是在网罗计算机系统(NCS)中创建,并且随后成为开放软件基金会(OSF)的分布式计算环境(DCE)的组件。
Ø Xml:(eXtensible Markup Language)即可扩展标记语言,它与HTML一样,都是处于SGML,标准通用语言。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
Ø Xslt:XSLT和XML除了在数据抽取和信息提取领域能够大显身手外,在数据集成领域同样是不可或缺的。实际上,数据抽取和数据集成可以看成一个完整过程的前后两个阶段,建设网站都或多或少等执行这个过程。
Ø Iconv:是libiconv库的接口,libiconv是一个基于GNU协议的开源库,主要是解决多语言编码处理转换等应用问题。下载地址
Ø zlib:是一种事实上的,以至于在标准文档中,zlib和常常互换使用。数以千计的应用程序直接或间接依靠zlib压缩函式库。下载地址
除此之外,还需要下载两个软件:Bison和Flex,下载地址分别是:、,这些软件基本都是开源软件,如果需要源码,都可以在gnu的官网上找到。
如果你不需要特殊功能,其实只需要安装Bison、Flex以及Perl即可。安装方法简单,只需要把下载的文件双击,一路Next即可OK,唯一需要注意的是把这些软件都按照到C盘的pgtools目录下,如果没有可以手动建立。但如果你有特殊需要,那可能就比较麻烦一点。下面简单介绍一下每个软件的安装:
其中可以安装的软件一路Next即可安装成功,注意也把这几个软件都安装到c:\ pgtools目录下,如python-2.4.4.msi,ActiveTcl8.5.0.0.283511-win32-ix86-threaded.exe,kfw-3-2-2.msi。
其它几个软件的安装:
l Iconv的安装,把libiconv1.9.1.bin.woe32.zip解压到c:\pgtools\iconv目录下,确保iconv下是bin、include、lib和share目录。
l Xml的安装,把libxml2-2.7.6.win32.zip解压到当前目录,把libxml2-2.7.6.win32重命名为libxml2,将libxml2拷贝到c:\pgtools下。
l Xslt的安装,把libxslt-1.1.26.win32.zip解压到当前目录,把libxslt-1.1.26.win32重命名为libxslt,将libxslt拷贝到c:\pgtools下。
l OpenSSL的安装,把openssl-0.9.8k_WIN32.zip解压到c:\pgtools\openssl目录下。
l Zlib的安装,把zlib123dll.zip解压到c:\pgtools\zlib目录下,把c:\pgtools\zlib下的static32重命名为lib目录,将其下的zlibstat.lib文件重命名为zdll.lib。
软件整个安装完毕,唯一没有安装的是uuid的软件包,修改配置文件config.pl的内容如下:
# 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
nls=>undef, # --enable-nls=
tcl=>'c:\pgtools\tcl', # --with-tls=
perl=>'c:\pgtools\perl', # --with-perl
python=>'c:\pgtools\python24', # --with-python=
krb5=>'c:\pgtools\krb5', # --with-krb5=
ldap=>1, # --with-ldap
openssl=>'c:\pgtools\openssl', # --with-ssl=
#uuid=>'c:\prog\pgsql\depend\ossp-uuid', #--with-ossp-uuid
xml=>'c:\pgtools\libxml2',
xslt=>'c:\pgtools\libxslt',
iconv=>'c:\pgtools\iconv',
zlib=>'c:\pgtools\zlib'# --with-zlib=
};
第四步、生成sln文件以及工程文件:
进入CMD,CD到D:\code\postgres\postgresql-8.4.1\src\tools\msvc目录下,可能有人已经忘记这是那个目录了,这就是你下载的源代码所在的目录的src\tools\msvc下,执行:perl build.pl DEBUG,DEBUG必须是大写的。这样生产的所有的工程文件都在根目录下,有人说可以在源代码的根目录下新建一个bin目录,然后执行:perl install.pl .. \bin,但我没有执行成功,也没有找到原因,大家想这样做的话可以试试,我觉得没必要,能调试就行了。
第五步、进入D:\code\postgres\postgresql-8.4.1目录,可以看到有一个名为pgsql.sln的文件,如果你正确安装了Vs2005的话,双击即可正确加载Postgres的所有代码编译也应该可以顺利通过了。
大家尝试过程中如果碰到什么问题,可以贴出来一起讨论。