图文说明Visual Studio 2013编译libpqxx步骤以及常见编译错误

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/Fish_55_66/article/details/50955806

编译步骤(x86版本)


1.下载并安装postgresql,点击进入下载地址。下载界面如下:




目前最新版本是9.5.1,我下载了 Win x86-32 的最新版本。安装后目录如下:





扫描二维码关注公众号,回复: 5029196 查看本文章

2.下载并解压缩libpqxx,点击进入下载地址下载界面如下:




目前最新版本是4.0.1,我下载了libpqxx-4.0.1.tar.gz 压缩包。解压后目录如下:





3.编译环境准备。安装或解压路径请以实际的为准,本文路径仅供参考

  • 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\win32 ,将该路径下的common-sample文件另存为common文件

  • 打开并删除上述common文件原有全部内容,然后将以下代码复制到common文件中并保存。
       *意:复制后请将第53行 PGSQLSRC 的值修改为你实际安装postgresql的根目录,同时根目录两端的双引号不能省略!
# Common options for Visual C++ makefiles to build libpqxx and its regression
# test.
# THE ORIGINAL OF THIS FILE IS CALLED common-sample; DON'T EDIT THE ORIGINAL or
# you may lose your changes when you upgrade your libpqxx sources.
# Instead, copy "common-sample" to "common" and edit just the file "common".

# Caution: on Windows, some environments, such as the "make" that comes with
# Visual C++, expect you to use backslashes as path separators (for example,
# "C:\src\libpqxx") whereas others like MinGW want you to use more conventional
# slashes (as in "C:/src/libpqxx").

# Standard library namespace.
# There are only two reasons why you might want to change this:
#
# 1. Your compiler doesn't define the standard library in the "std" namespace
# but in the global namespace, in which case PGSTD should be the empty string.
# However, a compiler with that problem is not likely to be good enough to
# compile libpqxx.
#
# 2. You are using a third-party standard library implementation such as
# STLport, which lives in another namespace to avoid clashes with the
# implementation that came with the compiler.
#
# In the latter case, PGSTD must be set to the namespace used by your preferred
# implementation.  In all other cases, just leave this set to "std".

STD="std"

# If you are using a 3rd-party STL like STLport, remember to check your path
# and be sure the STLport is included before the MSVC includes. VCVARS32.BAT
# doesn't know anything about the directories as defined in the IDE. I use
#
# set INCLUDE=\Utility\Code\STLport-4.5\stlport;%INCLUDE%
#
# ...and set STD to "_STL".

# Depending on your STL library min/max need to be defined.  Using STLport
# there is no need for libpqxx to redefine these for me.

# The next line gives us the directory under which all PostgreSQL include
# directories, DLLs and LIB files can be found.
#
# If you built PostgreSQL from source, this is probably the only line you
# will need to change.
#
# If you installed PostgreSQL using the One Click Installer from EnterpriseDB,
# comment out the following line and uncomment the line after it.
#
# Edit the appropriate line to match your specific installation.

#PGSQLSRC="C:\Sources\postgresql-9.1.1\src"

PGSQLSRC="D:\Program Files (x86)\PostgreSQL\9.5"

# This is the directory where the Postgres header files, e.g. postgres_ext.h,
# are found.

PGSQLINC=$(PGSQLSRC)\include

# This is the directory where the libpq header files, e.g. libpq-fe.h,
# are found.  If you used the One Click Installer, comment out the next line
# and uncomment the one following it:

#LIBPQINC=$(PGSQLSRC)\interfaces\libpq

LIBPQINC=$(PGSQLSRC)\include

# This is the directory where the release build of the libpq DLL
# and its corresponding LIB file are found, as well as the names of
# those two files.
#
# If you installed PostgreSQL using the One Click Installer from EnterpriseDB,
# comment out the next three lines and uncomment the following three:

#LIBPQPATH=$(PGSQLSRC)\interfaces\libpq\Release
#LIBPQDLL=libpq.dll
#LIBPQLIB=libpqdll.lib

LIBPQPATH=$(PGSQLSRC)\lib
LIBPQDLL=libpq.dll
LIBPQLIB=libpq.lib

# This is the directory where the debug build of the libpq DLL
# and its corresponding LIB file are found, as well as the names of
# those two files.
#
# NOTE: If you don't have access to a debug build of libpq, just
# provide the same information as above here. The debug builds of
# libpqxx will reference the release version of libpq, which will
# only limit your ability to debug libpq sources but otherwise should
# work just fine.
#
# If you installed PostgreSQL using the One Click Installer from EnterpriseDB,
# comment out the next three lines and uncomment the following three.

#LIBPQDPATH=$(PGSQLSRC)\interfaces\libpq\Debug
#LIBPQDDLL=libpqd.dll
#LIBPQDLIB=libpqddll.lib

LIBPQDPATH=$(PGSQLSRC)\lib
LIBPQDDLL=libpq.dll
LIBPQDLIB=libpq.lib
  • 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\config\sample-headers\compiler\VisualStudio2010\pqxx ,将该路径下的全部头文件拷贝到目录 D:\Program Files (x86)\libpqxx-4.0.1\include\pqxx中
  • 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\config\sample-headers\libpq\9.0\pqxx ,将该路径下的全部头文件拷贝到目录 D:\Program Files (x86)\libpqxx-4.0.1\include\pqxx中
  • 进入libpqxx的解压路径 D:\Program Files (x86)\libpqxx-4.0.1\src ,打开 largeobject.cxx 源文件,在第34行加入头文件#include <algorithm>
              

4.开始编译。安装或解压路径请以实际的为准,本文路径仅供参考
  • 在开始菜单选择Visual Studio 2013的开发人员命令提示工具,并以管理员方式运行,然后直接运行命令:vcvars32.bat
              
  • 将命令提示工具定位到 libpqxx 的解压路径: D:\Program Files (x86)\libpqxx-4.0.1
       
  • 最后在命令提示工具中直接运行命令:nmake /f win32/vc-libpqxx.mak ALL,即可开始编译。
          
  • 编译成功后,所生成的静态库以及动态库,包括DEBUG版本和RELEASE版本,全部都在如下目录中:
             


常见编译错误

  • 提示缺少头文件。
              请查看common文件中的 PGSQLSRC 的值是否已经修改为你实际安装postgresql的根目录,并确保已经按照上述步骤拷贝全部所需头文件。
  • 提示类似错误:error U1077: 'copy' : return code '0x1'。
             请查看common文件中的 PGSQLSRC 的值是否已经修改为你实际安装postgresql的根目录,并确保根目录两端的双引号存在。
  • 提示类似错误: min() 或者 max() 不是std 的标准函数。
             请确保 largeobject.cxx 源文件第34行已经加入头文件 #include <algorithm>。
  • 提示一堆无法解析的外部函数。
              如果编译的是 x86 版本的 libpqxx ,请确保安装的 postgresql 也是 x86 版本的;同样 x64 版本的也是一个道理。


关于 libpgxx 更多的编译选项及编译说明,请参照 libpqxx 解压路径 Win32 目录下的common,INSTALL.TXT 以及 vc-libpgxx.mak 等文件。

猜你喜欢

转载自blog.csdn.net/Fish_55_66/article/details/50955806