搭建用于Visual Studio VC++的libpqxx环境
前言
libpqxx是用于开发PostgreSQL数据库的C++库,它对PostgreSQL的接口函数进行了封装,从而简化了开发流程。
本文涉及到的各组件版本如下:
- Visual Studio:2015
- PostgreSQL:10.12
- libpqxx:6.4
准备工作
1. PostgreSQL的下载与安装
libpqxx的运行依赖于PostgreSQL的API,所以先要建立好PostgreSQL环境。PostgreSQL的下载与安装非本文内容,故略去。
2. libpqxx的下载
libpqxx现在已转移至GitHub发布,地址如下:
https://github.com/jtv/libpqxx
下载后解压缩至任一目录,例如笔者的为:C:\Program Files (x86)\libpqxx-6.4
libpqxx的编译
在Windows平台上使用libpqxx,需要先对下载的发行包进行编译。
1. 进入libpqxx根目录,把win32\common-sample改名为win32\common,用文本编辑器打开它,进行如下的修改。
修改字段PGSQLSRC的值为PostgreSql安装的根目录,笔者的为:C:\Program Files (x86)\PostgreSQL\10,如下图:
注意路径的两端不要带引号,且字符之间不能有空格,否则会在编译过程中出现如下的错误:
The system cannot find the file specified. NMAKE : fatal error U1077: 'copy' : return code '0x1' Stop.
解决方法是如图那样采用短目录名。
接下来是库文件目录的修改,具体如下:
注释掉以下行:
LIBPQINC=$(PGSQLSRC)\interfaces\libpq
取消以下行的注释:
LIBPQINC=$(PGSQLSRC)\include
注释掉以下行:
LIBPQPATH=$(PGSQLSRC)\interfaces\libpq\Release LIBPQDLL=libpq.dll LIBPQLIB=libpqdll.lib
取消以下行的注释:
LIBPQDPATH=$(PGSQLSRC)\lib LIBPQDDLL=libpq.dll LIBPQDLIB=libpq.lib
LIBPQDPATH=$(PGSQLSRC)\interfaces\libpq\Debug LIBPQDDLL=libpqd.dll LIBPQDLIB=libpqddll.lib
取消以下行的注释:
LIBPQDPATH=$(PGSQLSRC)\lib LIBPQDDLL=libpq.dll LIBPQDLIB=libpq.lib
完成后如下图:
2. 将config\sample-headers\compile\VisualStudio2013\pqxx\目录下的所有头文件拷贝到include\pqxx目录下。
3. 如果是编译64位的libpqxx,用文本编辑器打开win32\vc-libpqxx.mak文件,将
LINK_FLAGS_BASE=kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:I386 shell32.lib secur32.lib wldap32.lib
修改为
LINK_FLAGS_BASE=kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:x64 shell32.lib secur32.lib wldap32.lib
4. 在开始菜单选择Visual Studio 2015的开发人员命令提示工具,并以管理员方式运行。然后直接运行命令:vcvars32.bat
接着进入libpqxx的根目录,执行以下命令进行编译:
nmake /f win32/vc-libpqxx.mak ALL
编译成功后,会生成供VC++调用的静态库和动态库,包括Debug和Release两个版本,均位于以下目录中:
其中文件名带尾缀“D”的,是用于Debug版本的库文件,不带的是用于Release版本的库文件。
Visual Studio的配置
1. 在VS的工程属性配置对话框中展开“VC++目录”项。在“包含目录”子项添加libpqxx根目录下的include目录,在“库目录”子项添加libpqxx根目录下的lib目录。
除了使用上述的绝对路径以外,也可以通过环境变量进行设置,后者的方法较为灵活。方法是新建一环境变量“libpqxx”,变量值为libpqxx的根目录,如下图。然后就可以在上述的设置中用$(libpqxx)来表示这一路径了。
2. 在VS的工程属性配置对话框中配置“链接器->输入->附加依赖项”项,添加静态库,注意需针对Debug版本及Release版本分别添加。Debug版本添加的库为libpqxxD.lib和libpq.lib;Release版本添加的库为libpqxx.lib和libpq.lib。
3. 将以下dll文件拷贝至工程的编译输出目录,以供程序调用。
libpqxx根目录的lib文件夹下的:
- libpq.dll
- libpqxx.dll
- libpqxxD.dll
PostgreSQL安装目录的bin文件夹下的:
- libcrypto-1_1.dll
- libiconv-2.dll
- libintl-8.dll
- libssl-1_1.dll
4. 在VC++工程的源文件中包含libpqxx的头文件
#include <pqxx/pqxx>
至此整个libpqxx环境搭建完毕。