vcpkg Visual Studio编译PostgreSQL源码

用Visual Studio编译PostgreSQL依赖包源码及PostgreSQL源码一节中,依赖包和PostgreSQL均采用源代码编译,编译过程比较复杂,本节中介绍使用vcpkg来安装编译PostgreSQL依赖包,相对源码编译比较简单。

1 安装vcpkg

注意:vcpkg需要在Windows PowerShell中运行

帮助文档

cd E:\tools
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
#查看vcpkg帮助信息
vcpkg help
#使用下列命令查看软件包支持的平台
vcpkg help triplet
#--triplet=x64-windows表示仅在windows上安装64位软件包
#vcpkg install libiconv --triplet=x64-windows
  • 安装成功后将vcpkg设置至环境变量path
  • vcpkg install libiconv默认为32位环境,如果经常使用64位环境,可以设置环境变量“VCPKG_DEFAULT_TRIPLET=x64-windows”,表示默认安装在windows上安装64位软件包,此时vcpkg install libiconv --triplet=x64-windows等效于vcpkg install libiconv。

安装常用的软件包

vcpkg search getopt
vcpkg install getopt --triplet=x64-windows

vcpkg search iconv
vcpkg install libiconv --triplet=x64-windows

vcpkg search gettext
vcpkg install gettext[tools] --triplet=x64-windows

vcpkg search readline
vcpkg install readline --triplet=x64-windows

vcpkg search gettimeofday
vcpkg install gettimeofday --triplet=x64-windows

vcpkg search pthreads
vcpkg install pthreads --triplet=x64-windows

vcpkg search icu
vcpkg install icu --triplet=x64-windows

vcpkg search regex
vcpkg remove tre --triplet=x64-windows

vcpkg search jansson
vcpkg install jansson --triplet=x64-windows

vcpkg search openssl
vcpkg install openssl --triplet=x64-windows

vcpkg search zlib
vcpkg install zlib --triplet=x64-windows

vcpkg search lz4
vcpkg install lz4 --triplet=x64-windows

vcpkg search liblzma
vcpkg install liblzma --triplet=x64-windows

vcpkg search libxml2
vcpkg install libxml2[tools] --triplet=x64-windows

vcpkg search libxslt
vcpkg install libxslt --triplet=x64-windows

vcpkg search tcl
vcpkg install tcl --triplet=x64-windows

vcpkg search libpq
vcpkg install libpq --triplet=x64-windows

vcpkg search pcre
vcpkg remove pcre --triplet=x64-windows

vcpkg search sqlite3
vcpkg install sqlite3 --triplet=x64-windows

vcpkg search sqlcipher
vcpkg install sqlcipher --triplet=x64-windows

2、从vcpkg复制PostgreSQL依赖的软件包

cd D:\build\pg
mkdir E:\pgsql\include
mkdir E:\pgsql\lib
mkdir E:\pgsql\bin
#nls
copy E:\tools\vcpkg\installed\x64-windows\bin\iconv-2.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\gettextlib-0-21.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\gettextsrc-0-21.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\textstyle-0.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\gettextlib-0-21.dll E:\tools\vcpkg\installed\x64-windows\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\gettextsrc-0-21.dll E:\tools\vcpkg\installed\x64-windows\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\textstyle-0.dll E:\tools\vcpkg\installed\x64-windows\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\msgfmt.exe E:\tools\vcpkg\installed\x64-windows\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\intl-8.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\charset-1.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\pthreadVC3.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\readline.dll E:\pgsql\bin /Y
#msgfmt在测试pg时会使用到
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\msgfmt.exe E:\pgsql\bin /Y
#zlib
copy E:\tools\vcpkg\installed\x64-windows\bin\zlib1.dll E:\pgsql\bin /Y
#lz4
copy E:\tools\vcpkg\installed\x64-windows\bin\lz4.dll E:\pgsql\bin /Y
#liblzma
copy E:\tools\vcpkg\installed\x64-windows\bin\lzma.dll E:\pgsql\bin /Y
#ICU
copy E:\tools\vcpkg\installed\x64-windows\bin\icudt69.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\icutu69.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\icuio69.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\icuin69.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\icuuc69.dll E:\pgsql\bin /Y
#openssl
copy E:\tools\vcpkg\installed\x64-windows\bin\libcrypto-1_1-x64.dll E:\pgsql\bin /Y
copy E:\tools\vcpkg\installed\x64-windows\bin\libssl-1_1-x64.dll E:\pgsql\bin /Y
#libxml2
copy E:\tools\vcpkg\installed\x64-windows\bin\libxml2.dll E:\pgsql\bin /Y
#libxslt
copy E:\tools\vcpkg\installed\x64-windows\bin\libxslt.dll E:\pgsql\bin /Y
#tcl/tk
copy E:\tools\vcpkg\installed\x64-windows\bin\tcl90.dll E:\pgsql\bin /Y

3、Perl

  • 经实际测试PostgreSQL 14当前仅支持Perl 5.26版本,不支持更高版本。
    源码下载安装,按需执行
#5.28.3源码安装,PostgreSQL编译失败
cd D:/build/pg
tar -xf perl-5.28.3.tar.bz2
cd perl-5.28.3/win32
#修改Makefile文件
#如果要编译32位,则取消Makefile文件WIN64前的注释
#修改安装目录INST_DRV,我的INST_DRV=E:\perl528
#修改编译器,根据您的编译器取消CCTYPE前的注释,同时注释默认的CCTYPE
nmake -f Makefile
nmake -f Makefile test
nmake -f Makefile install
E:\perl528\bin\perl -version
cd D:/build/pg
rd /S /Q D:\build\pg\perl-5.28.3


#源码安装
cd D:/build/pg
tar -xf perl-5.26.3.tar.bz2
cd perl-5.26.3/win32
#修改Makefile文件
#如果要编译32位,则取消Makefile文件WIN64前的注释
#修改安装目录INST_DRV,我的INST_DRV=E:\tools
#修改编译器,根据您的编译器取消CCTYPE前的注释,同时注释默认的CCTYPE
nmake -f Makefile
nmake -f Makefile test
nmake -f Makefile install
#设置环境变量,将E:/perl添加至PATH中
perl -version
cd D:/build/pg
rd /S /Q D:\build\pg\perl-5.26.3
copy E:\tools\perl\bin\perl526.dll E:\pgsql\bin /Y

4、python

下载,下载最新版本。

5、ossp-uuid

请参看Windows编译ossp-uuid

6 PostgreSQL

6.1 设置软件包

cd D:/build/pg
tar -xf postgresql-14.1.tar.gz

修改D:\build\pg\postgresql-14.1\src\tools\msvc\config_default.pl内容如下

our $config = {
	asserts => 0,    # --enable-cassert

	# blocksize => 8,         # --with-blocksize, 8kB by default
	# wal_blocksize => 8,     # --with-wal-blocksize, 8kB by default
	ldap      => 1,        # --with-ldap
	extraver  => undef,    # --with-extra-version=<string>
	gss       => undef,    # --with-gssapi=<path>
	icu       => 'E:/tools/vcpkg/installed/x64-windows',    # --with-icu=<path>
	lz4       => 'E:/tools/vcpkg/installed/x64-windows',    # --with-lz4=<path>
	nls       => 'E:/tools/vcpkg/installed/x64-windows',    # --enable-nls=<path>
	tap_tests => 1,    # --enable-tap-tests
	tcl       => 'E:/tools/tcltk',    # --with-tcl=<path>
	perl      => 'E:/tools/perl',    # --with-perl=<path>
	python    => 'C:/Python310',    # --with-python=<path>
	openssl   => 'E:/tools/vcpkg/installed/x64-windows',    # --with-ssl=openssl with <path>
	uuid      => 'E:/pgsql',    # --with-uuid=<path>
	xml       => 'E:/tools/vcpkg/installed/x64-windows',    # --with-libxml=<path>
	xslt      => 'E:/tools/vcpkg/installed/x64-windows',    # --with-libxslt=<path>
	iconv     => 'E:/tools/vcpkg/installed/x64-windows',    # (not in configure, path to iconv)
	zlib      => 'E:/tools/vcpkg/installed/x64-windows'     # --with-zlib=<path>
};

6.2 Perl超过5.26时报告的错误

“D:\build\pg\postgresql-14.1\pgsql.sln”(默认目标) (1) ->
“D:\build\pg\postgresql-14.1\bool_plperl.vcxproj”(默认目标) (83) ->
“D:\build\pg\postgresql-14.1\plperl.vcxproj”(默认目标) (84) ->
(Link 目标) ->
  plperl.obj : error LNK2019: 无法解析的外部符号 new_ctype,函数 setlocale_perl 中引用了该符号 [D:\build\pg\postgresql-14.1\plperl.vcxproj
]
  plperl.obj : error LNK2019: 无法解析的外部符号 new_collate,函数 setlocale_perl 中引用了该符号 [D:\build\pg\postgresql-14.1\plperl.vcxpr
oj]
  plperl.obj : error LNK2019: 无法解析的外部符号 new_numeric,函数 setlocale_perl 中引用了该符号 [D:\build\pg\postgresql-14.1\plperl.vcxpr
oj]
  .\Debug\plperl\plperl.dll : fatal error LNK1120: 3 个无法解析的外部命令 [D:\build\pg\postgresql-14.1\plperl.vcxproj]

6.3 开始编译

copy E:\tools\vcpkg\installed\x64-windows\tools\openssl\openssl.cnf E:\tools\vcpkg\installed\x64-windows\bin\openssl.cnf
copy E:\tools\vcpkg\installed\x64-windows\tools\openssl\openssl.exe E:\tools\vcpkg\installed\x64-windows\bin\openssl.exe
copy E:\tools\vcpkg\installed\x64-windows\tools\gettext\bin\msgfmt.exe E:\tools\vcpkg\installed\x64-windows\bin
#编译PostgreSQL时引用的库名称为libintl.lib
copy E:\tools\vcpkg\installed\x64-windows\lib\intl.lib E:\tools\vcpkg\installed\x64-windows\lib\libintl.lib
#编译PostgreSQL时引用的库名称为zdll.lib
copy E:\tools\vcpkg\installed\x64-windows\lib\zlib.lib E:\tools\vcpkg\installed\x64-windows\lib\zdll.lib
#编译PostgreSQL时引用的库名称为liblz4.lib
copy E:\tools\vcpkg\installed\x64-windows\lib\lz4.lib E:\tools\vcpkg\installed\x64-windows\lib\liblz4.lib
#编译PostgreSQL时引用的库名称为icu
mkdir E:\tools\vcpkg\installed\x64-windows\lib64
copy E:\tools\vcpkg\installed\x64-windows\lib\icudt.lib E:\tools\vcpkg\installed\x64-windows\lib64\icudt.lib
copy E:\tools\vcpkg\installed\x64-windows\lib\icuin.lib E:\tools\vcpkg\installed\x64-windows\lib64\icuin.lib
copy E:\tools\vcpkg\installed\x64-windows\lib\icuio.lib E:\tools\vcpkg\installed\x64-windows\lib64\icuio.lib
copy E:\tools\vcpkg\installed\x64-windows\lib\icutu.lib E:\tools\vcpkg\installed\x64-windows\lib64\icutu.lib
copy E:\tools\vcpkg\installed\x64-windows\lib\icuuc.lib E:\tools\vcpkg\installed\x64-windows\lib64\icuuc.lib


cd D:\build\pg\postgresql-14.1\src\tools\msvc
#编译为Release版本
#perl build.pl
#生成DEBUG版本
perl build.pl DEBUG
#运行回归测试
copy E:\pgsql\bin\intl-8.dll D:\build\pg\postgresql-14.1\Debug\zic /Y
copy E:\pgsql\bin\iconv-2.dll D:\build\pg\postgresql-14.1\Debug\zic /Y
xcopy E:\pgsql\bin\*.dll D:\build\pg\postgresql-14.1\tmp_install\bin /E /Y
perl vcregress.pl check

#测试成功后安装到目录
perl install.pl E:\pgsql
#perl install.pl C:\pgsql32

安装成功后将

E:\pgsql\bin

添加到环境变量PATH.然后打开命令行测试是否安装成功.

psql --help

D:\build\pg\postgresql-14.1目录不要删除,它包含有我们调试pg所需要的信息,在以后使用Visual Studio调试pg还要使用这个目录。

initdb.exe -D D:\data\pgdata -E UTF-8 --locale=Chinese_China.936 -A md5 -W -U postgres
pg_ctl.exe -D D:\data\pgdata  start
pg_ctl.exe -m fast -D D:\data\pgdata  stop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kmblack1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值