vs2015 搭建libpqxx 环境
最近工作上一个项目要求查询postgreSQL数据库中数据做处理显示,需要在Windows环境下使用,查了相关资料可以使用libpqxx的开源库来做数据库的登录,查询。
具体的数据库登录,查询等,在这里不需赘述,网络上有很多资料介绍,我也就不班门弄斧了,写一个认为不错的教程链接http://www.tutorialspoint.com/postgresql/postgresql_c_cpp.htm,希望对你有帮助。
下面就进入重点,libpqxx环境的搭建。(参考了其他博主的笔记http://www.cppblog.com/deajosha/archive/2015/11/07/211146.html)
1. 下载PostgreSql和libpgxx
PostgreSql下载地址:http://www.postgresql.org/download/ 选择windows版本下的PostgreSql安装包(x86和x64)。
libpgxx下载地址:https://github.com/dreamsxin/libpqxx (当然我是去这里下的http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/)
libpgxx官网资料地址:http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/
libpgxx tutorial地址: http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Tutorial/
2. 安装PostgreSql
点击安装postgreSql安装包。如果要编译32位的libpgxx,请下载32位的PostgreSql安装程序,一键安装到即可。不过最新版的PostgreSql有个令人困扰的问题,那就是安装到最后是会弹出Stack Builder选择的问题,其实你如果没有特殊的需要完全可以选择取消在这里结束。当然你如果需要其他功能可以进入选择。我只是需要Windows下c++接口实现数据库连接和查询等简单功能于是在这里就结束了。
3. 编译libpgxx4.0.1
3.1 解压libpqxx4.0.1压缩包,把win32\common-sample另存为win32\common, 使用ue编译器打开win32\common文件,
修改PGSQLSRC的值为PostgreSql安装的根目录,如C:\Program Files (x86)\PostgreSQL\9.5。
把LIBPQINC=$(PGSQLSRC)\interfaces\libpq注释掉,
取消
LIBPQINC=$(PGSQLSRC)\include的注释。
把LIBPQPATH=$(PGSQLSRC)\interfaces\libpq\Release
取消
LIBPQDPATH=$(PGSQLSRC)\lib
取消
LIBPQDPATH=$(PGSQLSRC)\lib
3.2 将config\ample-headers\compile\VisualStudio2010\pqxx\目录下的所有头文件拷贝到include\pqxx目录下;
将 config\sample-headers\libpq\9.0\pqxx\目录下的所有头文件拷贝到include\pqxx目录下。
3.3 如果是编译64位的libpqxx, 请使用ue编译打开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
3.4 添加#include <algorithm>到src\largeobject.cxx文件的34行(否则在编译时会报错)。
3.5 选择Visual Studio 2015下的Visual Studio Tools下的命令提示行工具(我使用的VS2015 开发人员命令提示,当然还可以使用X86,x64兼容工具命令提示符),并以管理员方式运行;
运行命令:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe" /f win32/vc-libpqxx.mak ALL.
编译成功后,会将编译输出的静态链接库的debug/release及动态链接库的debug/release文件放到lib目录下如:
细心的朋友可能发现我的目录里面多出了4个文件libeay32.dll,libiconv-2.dll,libintl-8.dll,ssleay32.dll。这几个文件在我使用libpqxx编写c++程序编译时提示的缺少动态库,这是在网上找的文件,放到这个目录就好了。
最后,还有一个问题,那就是在编写c++代码的时候需要配置visual的解决方案,具体的添加附加头文件,附加依赖什么的不在这里介绍了。需要提醒的是libpqxx最好选择static版本的。因为本博主一开始选择的非static版本的使用,编译可以通过,就是在运行的时候报异常,困扰了很久。据本人推测应该是非static版本的缺少某些系统依赖的动态库吧,也不再做深究,有兴趣的朋友可以使用depends.exe工具查找下。