9.1第十六章

== 第十六章 用源码在windows中安装 WINDOWS下用源码安装==
===16.2 用Visual C++或Borland C++编译libpq===
对于windows，建议大多数用户下载二进制发布包，只需从PostgreSQL网站上单击安装包就可得到。用源码安装主要是为想开发PostgreSQL或扩展版的人打算的。
对于需要在windows下安装PostgreSQL的大多数普通用户来说，推荐从官方网站下载一键式安装包进行安装。源代码安装主要是面向PostgreSQL的开发人员，或者是PostgreSQL相关扩展的开发人员。
在windows中有很多不同的多种方法建立编译安装PostgreSQL，用对于微软工具的话,最简单的编译方法是安装一个最新版本的微软平台SDK，并且使用其自带的编译器进行编译。也可以用Visual C++2005或2008来编译安装。在一些情况下，除了编译器还要安装SDK平台。
It is also possible to build PostgreSQL using the GNU compiler tools provided by MinGW, or using Cygwin for older versions of Windows.
也可用MinGW里的GNU编译器来编译PostgreSQL,如果windows的版本比较旧的话,则可以使用Cygwin下的编译工具。
Finally, the client access library (libpq) can be built using Visual C++ 7.1 or Borland C++ for compatibility with statically linked applications built using these tools.
最后，为了兼容静态链接了libpq的应用，可以用Visual C++ 7.1 或 Borland C++来编译libpq。
 
Building using MinGW or Cygwin uses the normal build system, see Chapter 15 and the specific notes in Section 15.7.5 and Section 15.7.2. To produce native 64 bit binaries in these environments, use the tools from MinGW-w64. These tools can also be used to cross-compile for 32 bit and 64 bit Windows targets on other hosts, such as Linux and Darwin. Cygwin is not recommended for running a production server, and it should only be used for running on older versions of Windows where the native build does not work, such as Windows 98. The official binaries are built using Visual Studio.
使用 MinGW 或 Cygwin的普通编译系统的话，请参看第15章及15.7.5节和15.7.2节的相关说明。要在这些环境中生成原生的64位可执行程序的话，则可使用MinGW-w64中带的工具。这些工具也可在32位和64位windows下,执行交叉编译，生成编译linux 和Darwin等跨平台下的可执行程序。生产环境下的服务器不推荐使用Cygwin平台，它仅适合用于在Windows 98等比较陈旧版本的windows版本上系统的编译器编译不了时使用。官方二进制可执行文件是用Visual Studio编译的。
Native builds of psql don't support command line editing. The Cygwin build does support command line editing, so it should be used where psql is needed for interactive use on Windows. 
原生的psql可执行程序不支持命令行编辑，而Cygwin下编译的可执行文件支持命令行编辑，所以如果想在window环境下使用交互式的psql的话，最好使用Cygwin编译。
=== 16.1 用Visual C++或SDK平台创建 ===
PostgreSQL可以用微软的Visual C++编译器套件来创建编译。这些编译器可以是Visual Studio、Visual Studio Express或最近某些版本的Platform SDK。如果您还没有安装配置好Visual Studio环境，最简单的办法就是使用SDK平台的编译器，它可以从微软官网上免费下载。
PostgreSQL支持Visual Studio 2005 和 Visual Studio 2008两个版本的编译器，当仅使用Platform SDK或想编译64位windows编译版本时，只支持使用Visual Studio 2008编译器。Visual Studio2010还不支持PostgreSQL在Windows平台上的编译。
用Visula C++创建的工具在目录src/tools/msvc下，在编译时，确保没有MinGW 或 Cygwin的工具出现在您的系统路径下，并且还要确保在您路径里所有所需的Visual C++工具都可用。在Visual Studio里，启动
Visual Studio命令提示符，在SDK平台里，启动列在开始菜单的CMD shell。如果您想编译一个64位的版本，您必需使用64位版本的命令。所有的命令都应该从src\tools\msvc 目录下运行。
在您编译之前，您也许需要编辑config.pl文件来反映您想改变的任何配置选项，或指定另外要使用的库的路径。完整的配置由首次阅读和解析的文件config_default.pl决定，并且从config.pl应用到任何改变中。例如，为了指定您Python安装的位置，将下面语句放到config.pl文件中：
 $config->{python} = 'c:\python26'; 
您只需指定与config_default.pl文件中有差别的参数。
如果您需要设定任何其他的环境变量，建立一个名为buildenv.pl的文件，并在里面放入所需的命令。例如，为bison增加路径，建一个文件包含：
 $ENV{PATH}=$ENV{PATH} . ';c:\some\where\bison\bin'; 
====16.1.1 要求 ====
要建立编译PostgreSQL，需要下面的几个额外的东西工具，利用文件config.pl文件来指定各个库的可用所在目录，
微软平台微软的Platform SDK
推荐您将微软的Platform SDK升级到最新版本(最新的版本是7.0)，可以从网站http://www.microsoft.com/downloads/. 下载
您必须始终保留微软SDK中的Windows头文件和SDK的部分库，如果您安装的Platform SDK已经包含了Visual C++编译器，则您不需要使用Visual Studio来编译。
ActiveState Perl
ActiveState Perl用来运行编译生成脚本，MinGW或Cygwin中的Perl则不行。Perl所在路径它必须放在路径PATH环境变量中。二进制可以从http://www.activestate.com下载（注意：要求要版本5.8或者更新的版本，免费标准包就足够了）
下面的额外产品在开始之前不需要，但是编译完整的包时需要，利用config.pl文件来指定库的可用目录。
ActiveState TCL
用来编译PL/TCL（注意：要求版本8.4，免费标准包就足够）
Bison and Flex
Bison and Flex用来从Git编译，但是在编译一个发行文件时不需要。注意Bison只有版本1.875或2.2或更高版本可用，同样，Flex需要版本2.5.31或更高。Bison可以从http://gnuwin32.sourceforge.net下载，Flex可以从http://www.postgresql.org/ftp/misc/winflex/下载。
Diff
Diff为运行regression tests所需，可以从http://gnuwin32.sourceforge.net下载
Gettext
Gettext为用NLS支持编译所需，可以从http://gnuwin32.sourceforge.net下载。注意：二进制、管理和开发文件都需要。
MIT Kerberos
为支持Kerberos authentication所需，MIT Kerberos可以从http://web.mit.edu/Kerberos/dist/index.html下载。
libxml2 and libxslt
为支持XML所需，二进制文件可以从http://zlatkovic.com/pub/libxml下载或源文件http://xmlsoft.org。注意：libxml2需要iconv，它可以从相同的下载位置得到。
openssl
为支持SSL所需，二进制文件可以从http://www.slproweb.com/products/Win32OpenSSL.html下载或源文件http://www.openssl.org. 
ossp-uuid
为支持UUID-OSSP所需，源文件可以从http://www.ossp.org/pkg/lib/uuid/下载
Python
为编译PL/Python所需，二进制文件可以从http://www.python.org下载。
zlib
为支持压缩成pg_dump和pg_restore所需，二进制文件可以从http://www.zlib.net下载。
====16.1.2 针对64位windows的特别考虑====
PostgreSQL将只为64位windows的x64体系结构编译，它不支持itanium处理器。
在同一编译树下不支持混合的32和64位版本系统，如果是在这些环境下，编译系统会自动发现并且相应的进行编译。因为这个原因，在编译之前开始正确的命令是很重要的。
要使用服务器端的第三方库，例如python或openssl，该库必须得是64位的。没有支持在64位服务器上下载32位库的。PostgreSQL支持的仅有几个第三方库可以在32位可用，在这种情况下，他们不能使用于64位的PostgreSQL。
====16.1.3 编译====
为编译所有的发行配置的PostgreSQL（默认情况），运行命令
build
为编译所有处于调试配置的PostgreSQL，运行命令
build DEBUG
只编译单个项目，例如psql，运行命令
 build psql
 build DEBUG psql
要将默认编译配置改成调试配置，将下面的语句放到buildenv.pl文件中
$ENV{CONFIG}="Debug";
也有可能编译在the Visual Studio GUI的配置，这种情况，您需要从命令提示中运行
perl mkvcbuild.pl
然后在Visual Studio中打开生成的文件pgsql.sln （在源树的根目录下）。
====16.1.4 清除和安装 ====
大多数情况，Visual Studio中的自动依赖性足迹会处理更改的文件，但是如果有很大改动的话，您也许希望清除安装，想要做到这一点，只需简单地运行clean.bat 命令，它将自动清除所有生成的文件。您也可以运行dist参数，在这种情况下，它将类似于make distclean并且也移除flex/bison 输出文件。
默认情况是所有文件都写到debug或release目录的一个子目录下，想使用标准设置安装这些文件，初始化这些生成的文件并且使用数据库，运行命令：
install c:\destination\directory
====16.1.5 运行回归测试 ====
要运行回归测试，首先必须确信您已经完成了所需部分的编译，并且确保用来装载系统所有部分的DLLs在系统路径下。如果没有，通过buildenv.pl文件设置它。为运行测试，在目录src\tools\msvc下运行下面命令中的一个
 vcregress check
 vcregress installcheck
 vcregress plcheck
 vcregress contribcheck
要改变使用的调度程序（默认是并行），将它加到命令行中：
 vcregress check serial
想要关于回归测试的更多信息，见第30章。
====16.1.6 编译文件====
编译HTML格式的PostgreSQL文件需要几个工具和文件，为所有这些文件新建一个根目录，将它们保存到下面列的子目录中。
OpenJade 1.3.1-2
从http://sourceforge.net/projects/openjade/files/openjade/1.3.1/openjade-1_3_1-2-bin.zip/download下载，将其解压到子目录openjade-1.3.1中
DocBook DTD 4.2
从http://www.oasis-open.org/docbook/sgml/4.2/docbook-4.2.zip下载并解压到docbook子目录中。
DocBook DSSSL 1.79
从http://sourceforge.net/projects/docbook/files/docbook-dsssl/1.79/docbook-dsssl-1.79.zip/download下载并解压到docbook-dsssl-1.79子目录中。
ISO character entities 
从http://www.oasis-open.org/cover/ISOEnts.zip下载并解压到docbook子目录中。
编辑buildenv.pl文件，为根目录的位置增加一个变量，例如
$ENV{DOCROOT}='c:\docbook';
To build the documentation, run the command builddoc.bat. Note that this will actually run the build twice, in order to generate the indexes. The generated HTML files will be in doc\src\sgml. 
要编译文件，运行命令builddoc.bat。注意为了生成索引，实际上会运行编译两次。生成的HTML文件将在目录doc\src\sgml中。
=== 16.2 用Visual C++或Borland C++编译libpq ===
16.2. Building libpq with Visual C++ or Borland C++
Using Visual C++ 7.1-9.0 or Borland C++ to build libpq is only recommended if you need a version with different debug/release flags, or if you need a static library to link into an application. For normal use the MinGW or Visual Studio or Platform SDK method is recommended.
To build the libpq client library using Visual Studio 7.1 or later, change into the src directory and type the command:
nmake /f win32.mak
To build a 64-bit version of the libpq client library using Visual Studio 8.0 or later, change into the src directory and type in the command:
nmake /f win32.mak CPU=AMD64
See the win32.mak file for further details about supported variables.
To build the libpq client library using Borland C++, change into the src directory and type the command:
make -N -DCFG=Release /f bcc32.mak
如果您需要一个有不同调试/发行标志的版本或一个静态库来连接一项应用，这里只推荐您采用Visual C++ 7.1-9.0或Borland C++来编译libpq。一般的，建议使用MinGW或Visual Studio或SDK平台方法。
采用Visual Studio7.1或更高版本编译libpq客户端库，改变src目录并键入命令：
nmake /f win32.mak 
采用Visual Studio 8.0或更高版本创建64位的libpq客户端库，改变src目录并键入命令：
nmake /f win32.mak CPU=AMD64 
参考win32.mak文件查看关于支持变量的更多细节。
采用Borland C++编译libpq客户端库，改变src目录并键入命令：
 
make -N -DCFG=Release /f bcc32.mak 
====16.2.1 生成文件====
 
16.2.1. Generated Files
The following files will be built:
interfaces\libpq\Release\libpq.dll
 The dynamically linkable frontend library 
interfaces\libpq\Release\libpqdll.lib
 Import library to link your programs to libpq.dll 
interfaces\libpq\Release\libpq.lib
 Static version of the frontend library 
Normally you do not need to install any of the client files. You should place the libpq.dll file in the same directory as your applications executable file. Do not install libpq.dll into your Windows, System or System32 directory unless absolutely necessary. If this file is installed using a setup program, then it should be installed with version checking using the VERSIONINFO resource included in the file, to ensure that a newer version of the library is not overwritten.
If you are planning to do development using libpq on this machine, you will have to add the src\include and src\interfaces\libpq subdirectories of the source tree to the include path in your compiler's settings.
To use the library, you must add the libpqdll.lib file to your project. (In Visual C++, just right-click on the project and choose to add it.)
以下文件将被编译：
interfaces\libpq\Release\libpq.dll 
动态可连接前端库
interfaces\libpq\Release\libpqdll.lib 
连接您的程序到libpq.dll的重要库
interfaces\libpq\Release\libpq.lib 
前端库的静态版本
 
通常您不需要安装任意一个客户端文件，您应该将libpq.dll文件和您的应用可执行文件放在同一个目录下。除非十分必要，不要将libpq.dll安装到您的windows，System或System32目录中。如果该文件是用安装程序安装的，那么它应该在安装前用versioninfo进行版本审查，以确保不会覆盖新版本的库。
如果您计划在本机器上做开发，那么您必须将子目录src\include和src\interfaces\libpq添加到include 路径中。
要使用库，您必须将libpqdll.lib添加到您的项目中。（在Visual C++中，只需在项目上右击并且选择添加。）
Category:Chinese